在ASP.NET MVC 3中创建自定义错误页面的最佳方法是什么?我特别感兴趣的是404错误,但也有403错误。我是MVC框架的新手,传统上我来自PHP背景,但我正在快速学习。
我在发布此问题之前做了我的研究,并发现了这个链接: Custom error pages on asp.net MVC3
这个解决方案看起来很简单虽然当我尝试在我的机器上实现它时,我遇到了以下问题:IController errorsController = new ErrorsController();在Application_Error()函数内部。它说“无法找到类型或命名空间名称'ErrorsController'(您是否缺少using指令或程序集引用?”。
提前感谢您提供的帮助。
答案 0 :(得分:15)
您应该配置
<httpErrors>
下的部分
<system.webServer>
web.config文件中的部分组。
请参阅这篇文章:
http://www.iis.net/ConfigReference/system.webServer/httpErrors
此外,您可以使用您在问题中链接的错误控制器,但初始流程应由IIS管理。通过本节,您可以指示IIS应该执行由您的控制器管理的URL。
另外请注意控制器操作中正确的Response.Status属性字符串,因为建议的解决方案返回“200 OK”,这可能会让浏览器感到困惑。例如
public class ErrorsController : Controller
{
public ActionResult NotFound()
{
Response.Status = "404 Not Found";
return View();
}
public ActionResult ServerError()
{
byte[] delay = new byte[1];
RandomNumberGenerator prng = new RNGCryptoServiceProvider();
prng.GetBytes(delay);
Thread.Sleep((int)delay[0]);
IDisposable disposable = prng as IDisposable;
if (disposable != null) { disposable.Dispose(); }
Response.Status = "500 Internal Server Error";
return View();
}
}
配置示例:
<httpErrors defaultPath="/error.htm" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL">
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="500" path="/errors/servererror/" responseMode="ExecuteURL" />
<error statusCode="404" path="/errors/notfound/" responseMode="ExecuteURL" />
</httpErrors>
您可以使用“subStatusCode”属性控制404.3和其他。
答案 1 :(得分:2)
为Application_EndRequest
添加MvcApplication
方法,根据Marco's Better-Than-Unicorns MVC 404 Answer为“未找到”页面调用视图。