如果URL不包含现有控制器,则Application_Error从未到达404

本文关键字:Error Application URL 包含现 控制器 如果 | 更新日期: 2023-09-27 18:09:01

我的global.asax:

protected void Application_Error(object sender, EventArgs e)
{
    var exception = Server.GetLastError();
    var httpException = exception as HttpException;
    //...
}

如果我像这样调用URL,其中NonExistingNonesense不存在:

localhost/ExistingArea/ExistingController/NonExistingNonesense

一切正常。(代码来自我的全局。Asax将被调用)

但是如果我这样调用url:

localhost/NonExistingNonesense

代码从未到达Application_Error方法。

有什么问题吗?


我在我的web.config:

<system.web>
  <customErrors mode="On"></customErrors>
  <!-- ... -->
</system.web>
<system.webServer>
  <httpErrors existingResponse="PassThrough"/>
  <!-- ... -->
<system.webServer>

请注意:

我知道这是可能的

<error statusCode="404" responseMode="ExecuteURL" path="/Error/PageNotFound" />

问题是,我需要传递一些异常上下文到我的视图,所以我想通过代码来处理这个

如果URL不包含现有控制器,则Application_Error从未到达404

您的ASP。. NET代码不会被触发,除非它被IIS框架调用。默认情况下,IIS将在到达代码之前停止对不存在的文件的任何请求。但是你可以把它关掉。

进入IIS管理,只有当请求映射到文件选项时才禁用Invoke处理程序。