【问题标题】:Customizing "A potentially dangerous Request.Path value was detected" error page自定义“检测到潜在危险的 Request.Path 值”错误页面
【发布时间】:2012-03-18 21:12:06
【问题描述】:

当我调用带有非授权字符(例如 *)的页面时,我得到一个黄页“检测到潜在危险的 Request.Path 值”。 看起来这是一个 400 错误页面。 我的目标是自定义此页面并显示干净的错误页面或重定向到主页(我尝试了两种解决方案)。 这是我在 web.config 中写的:

<system.webServer>
 <httpErrors errorMode="Custom">
  <remove statusCode="400" subStatusCode="-1" />
  <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="400" path="/page-non-trouvee.aspx?status=400" responseMode="ExecuteURL" />
  <error statusCode="404" path="/" responseMode="ExecuteURL" />
 </httpErrors>

我正在使用 IIS7。 关键是我的 400 页面仍然显示为黄色错误页面。

必须有一种解决方法,因为尽管 Stack Exchange 数据资源管理器在 https://data.stackexchange.com/users&nbsp 上存在此问题,但 Stack Overflow 本身却没有:https://stackoverflow.com/users&nbsp

有什么想法吗?

【问题讨论】:

  • 可以通过修改应用程序 配置标签的“defaultRedirect”属性以指向自定义错误页面 URL,将您看到的当前错误页面替换为自定义错误页面。这对你没有帮助?
  • 如果您使用的是 IIS7+,这里有一个更简单的解决方案:- stackoverflow.com/questions/30071341/…

标签: .net web-config


【解决方案1】:

正如 gbianchi 所说,您可以像这样进行customErrors 重定向:

<customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="/404" />

但是,这会导致带有原始路径和段的令人讨厌的查询字符串。

如果它是一个 ASP.NET 应用程序,您可以在 Global.asax.cs 文件中重载 Application_Error 事件。这是在 MVC 中做这件事的一种 hack-ish 方式:

protected void Application_Error() {
    var exception = Server.GetLastError();
    var httpException = exception as HttpException;
    if (httpException == null) {
        return;
    }

    var statusCode = httpException.GetHttpCode();
    // HACK to get around the Request.Path errors from invalid characters
    if ((statusCode == 404) || ((statusCode == 400) && httpException.Message.Contains("Request.Path"))) {
        Response.Clear();
        Server.ClearError();
        var routeData = new RouteData();
        routeData.Values["controller"] = "Error";
        routeData.Values["exception"] = exception;
        Response.StatusCode = statusCode;
        routeData.Values["action"] = "NotFound";

        // Avoid IIS7 getting in the middle
        Response.TrySkipIisCustomErrors = true;
        IController errorsController = new ErrorController();
        HttpContextWrapper wrapper = new HttpContextWrapper(Context);
        var rc = new RequestContext(wrapper, routeData);
        errorsController.Execute(rc);
    }
}

【讨论】:

  • 您可以在重定向的末尾添加?,它不会附加url查询字符串sturff:defaultRedirect="/404?"
猜你喜欢
  • 1970-01-01
  • 2012-04-06
  • 2017-10-07
  • 2011-08-06
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多