ASP.NET MVC自定义错误处理,空白页面

问题描述:

我试图处理错误并显示404,403等适当的页面。ASP.NET MVC自定义错误处理,空白页面

为此,我制作了一个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

两者的customErrors和httpErrors

现在出现在我的web.config, 当我请求

mysite.com/Home/random_non-existent_action

我的自定义404页面显示(因为它被IIS旁路,我的错误处理过滤器工作)。但是,当我要求

mysite.com/content

mysite.com/images

我越来越有404个状态码空白响应。

当我改变responseMode重定向(而不是ExecuteURL),它的工作原理。但很显然,我试图用相对路径导航到我的自定义错误页面。

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

2,为什么当我提出responseMode =“重定向”,但它的工作不responseMode =“ExecuteURL”

任何帮助,因为我已经搜查了许多类似计算器的话题,但没有成功不胜感激。

我已经尝试过所有用于existingResponse和responseMode值的组合。除了responseMode =“Redirect”之外的任何内容都会使其变为空白并显示相应的状态码。

编辑:

我到底所做的是,

enter image description here

写HTML内容,并重定向到使用javascript我的自定义错误页。

+0

确实为这个问题帮你在所有的解决方案吗? http://*.com/questions/9997772/iis-7-5-custom-404-error-page-not-working-for-web-root-index-default –

+0

不,它不。目录浏览已安装 – OzanYukruk

在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(); 
    } 

希望这能对你的作品...

+0

Response.End();和Response.TrySkipIisCustomErrors = true;在行动方法是我的情况的关键。 –