我正在使用httpErrors模块在web.config中处理HttpError 404和500。 Web.Config中:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="404" path="/Error/Error" responseMode="Redirect"/>
<error statusCode="500" path="/Error/Error" responseMode="Redirect"/>
</httpErrors>
处理Global.asax中的错误并执行基于404和500的操作。
protected void Application_EndRequest()
{
if (Context.Response.StatusCode == 404 || Context.Response.StatusCode == 500)
{
Response.Clear();
var rd = new RouteData();
rd.Values["controller"] = "Error";
rd.Values["action"] = "Error";
IController controller = new ErrorController();
controller.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
}
}
代码在Local和Test服务器上工作正常但在Production服务器中中断。测试方法:在URL上写入RandomText以改变路由
HTTPS://***.com/RandomText
在本地和测试服务器中,系统通过错误/错误路由重定向到自定义错误页面。但是在生产服务器中,系统在输入上面的URL时给出空白页面。系统应该重定向到自定义错误页面。在chrome中的网络选项卡下,我可以看到返回的状态代码是403。
状态代码:403禁止
我尝试了不同的方法,例如在节点下包含subStatusCode = -1,并将responseMode更改为ExecuteURL,但没有任何效果。
如果有人有任何想法,请告诉我。
谢谢!!
URLScan的工作方式不同。我通过在我的解决方案中设置自定义错误页面来解决此问题。将使用重定向到控制器操作方法将不起作用。错误页面应该是静态页面。使它成为HTML或aspx。 Web.config代码:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="404" path="/Content/Error.html" responseMode="Redirect"/>
<error statusCode="500" path="/Content/Error.html" responseMode="Redirect"/>
</httpErrors>
快乐编码!!