Asp.net mvc ASP.NET MVC自定义错误处理,空白页
我试图处理错误并为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”之外的任何内容都会使其变为空白,并带有相应的状态代码 编辑: 我最后做的是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错误
使用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;在我的案例中,行动方法是关键。