由于我在Web.config和Global.asax中的设置,两次调用了NotFound方法

问题描述

我有一个MVC5应用程序。在配置文件中,我设置了以下内容

    <httpErrors errorMode="Custom" existingResponse="Replace">
      <clear/>
      <error statusCode="400" responseMode="ExecuteURL" path="/Error/BadRequest" />
      <error statusCode="403" responseMode="ExecuteURL" path="/Error/Forbidden" />
      <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFoundFromWebConfig" />
      <error statusCode="500" responseMode="ExecuteURL" path="/Error/Index" />
    </httpErrors>

我还在Application_Error方法的Global.asax.cs文件中处理错误

     Response.TrySkipIisCustomErrors = true;
     HttpContext.Current?.Response.Redirect("~/Error/NotFound",true);

现在,当我按下mysite / contactus / blah之类的控制器时,我看到NotFound方法调用了两次。

我尝试禁用这两个之一,但是这样做时出现了不同的问题。例如,如果我删除配置文件中的那个,则当404发生时,我得到了难看的黑色和红色页面。如果删除第二个页面,则会重定向到空白页面

有人可以帮忙吗?谢谢。

解决方法

根据上面的对话,我从Global.asax中删除了错误处理,并且我的routeconfig文件中还包含了一条捕获所有路由,由于我已经通过条件限制了路由,因此我删除了该路由。这解决了这个问题。