gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:54:05 25 4
gpt4 key购买 nike

我正在尝试处理错误并显示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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com