在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的页面

🙁

我该怎么办?

3 Solutions collect form web for “在Asp.net MVC中抛出/返回一个404 actionResult或exception,并让IIS处理它”

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

  • 避免使用inheritInChildApplications在子Web应用程序中的web.configinheritance
  • “经典”和“集成”pipe道模式在IIS7中有什么区别?
  • IIS - 此configuration部分不能在此path使用(configurationlocking?)
  • 如何将IIS 7站点迁移到另一台服务器?
  • 如何在IIS7上运行时将maxAllowedContentLength设置为500MB?
  • debuggingIIS时closuresVisual Studio附加安全警告
  • 如何从命令提示符分配SSL证书到IIS7站点
  • 将窗体身份validation与Windows身份validation混合
  • 可能添加MIMEtypes到web.config而不可能破坏网站?
  • Web应用程序的IIS7文件夹权限
  • IIS7上的经典ASP:拒绝向500内部服务器错误上的浏览器发送错误