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

5
什么是在ASP.NET MVC 3中创建自定义错误页面的最佳方法?我特别感兴趣的是404错误,还有403和其他错误。我是MVC框架的新手,传统上来自PHP背景,但学习得很快。
在发布这个问题之前,我进行了调查,并找到了这个链接: 在asp.net MVC3上自定义错误页面 那个解决方案似乎很简单,尽管当我尝试在我的机器上实现时,我遇到了以下问题:在Application_Error()函数内部,IController errorsController = new ErrorsController(); 它说“类型或命名空间名称'ErrorsController'找不到(您是否缺少使用指令或程序集引用?”。
提前感谢您提供的帮助。

可能是如何在ASP.NET MVC中正确处理404错误?的重复问题。 - Jahan Zinedine
2个回答

15

你应该进行配置

<httpErrors>
下面的部分
<system.webServer> 

您可以在 web.config 文件中使用 section group。

请参阅本文:

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和其他内容。


2

在您的 MvcApplication 中添加一个 Application_EndRequest 方法,以调用一个视图用于您的“未找到”页面,参见Marco 的更好的 MVC 404 答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接