【问题标题】:Action method not called when IIS error occurs, just blank page with 403 error发生 IIS 错误时未调用操作方法,只是出现 403 错误的空白页
【发布时间】:2014-11-13 08:47:41
【问题描述】:

我正在尝试捕获 IIS 错误,但根本没有获胜。除了 ASP.NET 引发的错误之外,我还想捕获源自 IIS 的所有错误。我开始尝试404 错误,我可以选择任何其他错误,但选择 404 作为起点。

我正在使用最新版本的ASP.NET MVC5 并通过IIS 7.5 运行网站。

我的web.config 中有以下设置:

<system.web>
    <customErrors mode="Off" />
</system.web>

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" path="/Error/Http404" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

我的错误控制器中有以下内容:

public class ErrorController : Controller
{
    public ActionResult Http404()
    {
        Response.StatusCode = (int)HttpStatusCode.NotFound;
        return View();
    }
}

我抛出这样的错误:

public ActionResult Index()
{
    return HttpNotFound();
}

鉴于我在 web.config 中的设置,我在错误控制器中的操作方法未命中。我见过人们在Application_Error 方法中捕获错误,但是上面的代码没有到达我的Application_Error 方法。我只能看到一个带有 403 错误状态的空白页面。

为什么人们像我一样设置上面的代码,但是在错误控制器中他们仍然去设置错误控制器和要调用的操作方法,这不是重复工作吗?为什么会返回 403 错误并显示空白页?

请不要将此问题作为重复问题关闭,但请帮我解决它。我已经解决了这里给出的关于 SO 的几乎所有问题。

这太令人沮丧了。

【问题讨论】:

  • 因为它没有抛出任何错误
  • 这和IIS抛出的404错误一样吗?如果 IIS 抛出此错误,那么我需要捕获它,但我不知道如何。

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:

转到 App-Start 文件夹中的 FilterConfig.cs。 为特定类型的异常添加你想要的异常类型和错误页面。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new LoggingExceptionFilter());
            filters.Add(new HandleErrorAttribute() { ExceptionType = typeof(Exception), View = "Error" }, 1);
            filters.Add(new HandleErrorAttribute() { ExceptionType = typeof(HttpException), View = "HttpExceptionError" }, 2);

        }

SHARED 文件夹中创建一个名为 HttpExceptionError 的视图。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2021-05-06
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多