asp.net-mvc - ASP.NET MVC自定义错误处理,空白页

标签 asp.net-mvc error-handling iis-8 custom-error-pages custom-error-handling

我正在尝试处理错误并显示404、403等相应的页面。

为此,我做了一个ErrorHandling过滤器,它可以按预期工作。即当我尝试要求

mysite.com/Home/random_non-existent_action

用户被重定向到我的自定义404页面并返回404作为响应代码。 401和403同样适用。

我已经通过错误处理过滤器和在web.config上进行的修改来实现了:

enter image description here

这是问题开始的地方,我们的客户也希望自定义IIS的错误页面,例如当我请求时

mysite.com/images,

正在显示IIS错误页面,因为禁用了目录浏览,并且由于在IIS级别上阻止了此浏览,所以我的错误处理过滤器不起作用。

为了覆盖IIS错误页面,我在web.config中添加了以下代码

enter image description here

现在,在我的web.config中同时存在customErrors和httpErrors时,
当我要求

mysite.com/Home/random_non-existent_action

显示了我的自定义404页面(因为IIS绕过了它,并且我的错误处理过滤器起作用了)。但是当我要求

mysite.com/content

要么

mysite.com/images

我收到带有404状态代码的空白回复。

当我将responseMode更改为Redirect(而不是ExecuteURL)时,它可以工作。但是很明显,我正在尝试使用相对路径导航到我的自定义错误页面。

1-当我尝试覆盖IIS自定义错误页面时为什么会收到空白响应?

2-为什么当我使responseMode =“Redirect”而不是responseMode =“ExecuteURL”时起作用

任何帮助将不胜感激,因为我已经搜索了许多类似的stackoverflow主题,但均未成功。

我已经尝试了所有现有的Response和responseMode值组合。除responseMode =“Redirect”之外的任何内容均会使其空白,并带有相应的状态代码。

编辑:

我最后要做的是

enter image description here

编写html内容,然后使用javascript重定向到我的自定义错误页面。

最佳答案

在MVC 5中,我遇到了同样的问题。我解决了在Global.asax处理这些错误的问题。将以下代码放在Global.asax.cs中。

public void Application_Error(Object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        Server.ClearError();

        var routeData = new RouteData();
        routeData.Values.Add("area", "");
        routeData.Values.Add("controller", "SystemAdministration");

        if (exception.GetType() == typeof(HttpException))
        {
            var code = ((HttpException) exception).GetHttpCode();
            if (code == 404)
            {
                routeData.Values.Add("action", "NotFound");
            }
            else if (code == 403 || code == 401)
            {
                routeData.Values.Add("action", "NoAuthorization");
            }
            else
            {
                routeData.Values.Add("action", "Index");
                routeData.Values.Add("statusCode", code);
            }
        }
        else
        {
            routeData.Values.Add("action", "Index");
            routeData.Values.Add("statusCode", 500);
        }
        routeData.Values.Add("exception", exception);

        Response.TrySkipIisCustomErrors = true;
        IController controller = new ErrorController();
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        Response.End();
    }

希望这对您有用...

关于asp.net-mvc - ASP.NET MVC自定义错误处理,空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637714/

相关文章:

asp.net-mvc - 如何通过LINQ表达式从数据库中获取处于特定角色的所有应用程序用户的列表?

asp.net-mvc - 在属性值中转义 @

python - formencode无效的返回类型

android - Android 服务中错误处理的最佳实践

css - 带有土耳其字符的 Internet Explorer 7,8 字体

iis-8 - 从另一台服务器克隆后如何更改 IIS 8.5 中的服务器名称

c# - ASP.NET MVC 表单发布

c# - 使用 float 时,ASP.NET MVC ViewModel 绑定(bind)十进制为空

php - SQLSTATE [HY000] : General error

asp.net-mvc-4 - Azure 云服务将 http 重定向到 https 不起作用(在许多链接上尝试过答案)