在Asp.net MVC中抛出/返回一个404 actionResult或exception,并让IIS处理它
如何从我的操作中抛出404或FileNotFoundexception/结果,并让IIS使用我的customErrorsconfiguration部分显示404页面?
我已经定义了我的customErrors像这样
<customErrors mode="On" defaultRedirect="/trouble"> <error statusCode="404" redirect="/notfound" /> </customErrors>
我第一次尝试在一个actionResult试图添加这个没有效果。
public class NotFoundResult : ActionResult { public NotFoundResult() { } public override void ExecuteResult(ControllerContext context) { context.HttpContext.Response.TrySkipIisCustomErrors = false; context.HttpContext.Response.StatusCode = 404; } }
但是这只是显示一个空白页面,而不是我/未find的页面
🙁
我该怎么办?
ASP.NET MVC 3引入了HttpNotFoundResult操作结果,它应该优先使用http状态码手动抛出exception。 这也可以通过控制器上的Controller.HttpNotFound方法返回:
public ActionResult MyControllerAction() { ... if (someNotFoundCondition) { return HttpNotFound(); } }
在MVC 3之前,您必须执行以下操作:
throw new HttpException(404, "HTTP/1.1 404 Not Found");
你可以调用Controller.HttpNotFound
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpnotfound(v=vs.98).aspx
if (model == null) { return HttpNotFound(); }
这也可以帮助;
ASP.NET MVC:当模型为空时,从控制器手动抛出404exception