使用带有响应模式的重定向的httpErrors时出现403禁止错误

问题描述 投票:0回答:1

我正在使用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,但没有任何效果。

如果有人有任何想法,请告诉我。

谢谢!!

.net web-config http-status-code-404 http-status-code-403 http-error
1个回答
0
投票

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>

快乐编码!!

© www.soinside.com 2019 - 2024. All rights reserved.