在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