Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC自定义错误处理,空白页_Asp.net Mvc_Error Handling_Iis 8_Custom Error Pages_Custom Error Handling - Fatal编程技术网

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

Asp.net mvc ASP.NET MVC自定义错误处理,空白页,asp.net-mvc,error-handling,iis-8,custom-error-pages,custom-error-handling,Asp.net Mvc,Error Handling,Iis 8,Custom Error Pages,Custom Error Handling,我试图处理错误并为404、403等显示适当的页面 为此,我制作了一个ErrorHandling过滤器,它按预期工作。也就是说,当我试图请求 mysite.com/Home/random\u不存在\u操作 用户被重定向到我的自定义404页面,并返回404作为响应代码。401和403也是如此 我通过错误处理过滤器实现了这一点,并在web.config上进行了如下修改: 这就是问题开始的地方,我们的客户希望自定义IIS的错误页面,例如当我请求时 mysite.com/images 正在显示IIS错误

我试图处理错误并为404、403等显示适当的页面

为此,我制作了一个ErrorHandling过滤器,它按预期工作。也就是说,当我试图请求

mysite.com/Home/random\u不存在\u操作

用户被重定向到我的自定义404页面,并返回404作为响应代码。401和403也是如此

我通过错误处理过滤器实现了这一点,并在web.config上进行了如下修改:

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

mysite.com/images

正在显示IIS错误页,因为禁用了目录浏览,并且在IIS级别阻止了此操作,所以“我的错误处理筛选器”不起作用

要覆盖IIS错误页,我将下面的代码添加到web.config

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

mysite.com/Home/random\u不存在\u操作

将显示我的自定义404页面(因为它是由IIS传递的,并且我的错误处理过滤器工作)。但是当我要求的时候

mysite.com/content

mysite.com/images

我得到一个404状态码的空白回复

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

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

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

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

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

编辑:

我最后做的是


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

在MVC5中,我遇到了同样的问题。我在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();
    }

希望这对你有用……

这个问题的解决方案对你有帮助吗?没有。目录浏览已安装Response.End();和Response.tryskipiiscustomerors=true;在我的案例中,行动方法是关键。