如何在ASP.NET MVC 3中创建自定义404错误页面?

skc*_*in7 5 error-handling asp.net-mvc http-status-code-404

在ASP.NET MVC 3中创建自定义错误页面的最佳方法是什么?我特别感兴趣的是404错误,但也有403错误.我是MVC框架的新手,传统上我来自PHP背景,但我正在快速学习.

我在发布此问题之前做了我的研究,并发现了这个链接: asp.net MVC3上的自定义错误页面

这个解决方案看起来很简单虽然当我尝试在我的机器上实现它时,我遇到了以下问题:IController errorsController = new ErrorsController(); 在Application_Error()函数内部.它说"无法找到类型或命名空间名称'ErrorsController'(您是否缺少using指令或程序集引用?").

提前感谢您提供的帮助.

Dam*_*ian 15

你应该配置

<httpErrors>
Run Code Online (Sandbox Code Playgroud)

部分

<system.webServer> 
Run Code Online (Sandbox Code Playgroud)

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

配置示例:

<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>
Run Code Online (Sandbox Code Playgroud)

您可以使用"subStatusCode"属性控制404.3和其他.