发生错误时不显示错误页面(响应) - customErrors为ON

时间:2018-03-14 10:34:12

标签: c# asp.net-mvc

我有一个标准的ASP.NET MVC应用程序。在这里,我想将所有错误重定向到自定义错误页面。

我试图根据我通常做的事情+谷歌来设置它,但仍然,我没有得到错误。

我有以下 web.config

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error/Index">
      <error redirect="~/Error/NotFound" statusCode="404" />
      <error redirect="~/Error/Index" statusCode="500" />

    </customErrors>
    <!-- More stuff :-) -->
  </system.web>
  <system.webServer>

这是我的错误控制器:

 public class ErrorController : Controller
    {
        public ViewResult Index()
        {
            return View("Error");
        }
        public ViewResult NotFound()
        {
            Response.StatusCode = 404; 
            return View("NotFound");
        }
    }

我有以下FilterConfig

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }
}

但是,当我在索引控制器中创建错误时:

    public ActionResult Index(InvoiceOverviewViewModel vm)
    {
        // used to test error pages :D
        int a = 5;
        int b = 0;
        int res = a / b;
    }

哪个出错,我看到以下内容:

enter image description here

虽然Index.cshtml中的ErrorController具有以下视图:

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_VerifyLayout.cshtml";
}

<h1>Danish text that doesn't make any sense here ;-) </h1>

是什么让它更奇怪,是我的404页面有效。此页面完全呈现在localhost(not on production)上。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题#1:

  

虽然我在ErrorController中的Index.cshtml有以下内容   视图...

您的错误视图名为Index,但在ErrorController中,您尝试返回名称为Error的未显存视图:

return View("Error");

ErrorController.Index()方法更改为:

public ViewResult Index()
{
    return View("Index");
}

或调用View(),不带参数,默认为"Index"

public ViewResult Index()
{
    return View();
}

问题#2:

filters.Add(new HandleErrorAttribute());

您应该删除HandleErrorAttribute过滤器。此过滤器将处理控制器操作引发的异常,并且它有自己的逻辑用于选择结果错误视图,这将阻止显示自定义错误页面。特别是,HandleErrorAttribute使用&#34;〜/ Views / Shared / Error.cshtml&#34;。这是您看到的错误视图的来源 - &#34;处理您的请求时出错。&#34;

希望这会有所帮助。以下是一些有关ASP.NET MVC中错误处理的有用资源: