Настройка страницы ошибки «Обнаружено потенциально опасное значение Request.Path» - PullRequest
7 голосов
/ 29 февраля 2012

Когда я вызываю страницу с несанкционированным символом (например, *), я получаю желтую страницу «Обнаружено потенциально опасное значение 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 все еще отображается как желтая страница с ошибкой.

Должен быть обходной путь, потому что, хотя в обозревателе данных стека Exchange есть эта проблема с http://data.stackexchange.com/users&nbsp, переполнение стека само по себе не: https://stackoverflow.com/users&nbsp

Есть идеи?

1 Ответ

8 голосов
/ 11 апреля 2012

Как упоминалось в gbianchi, вы можете сделать перенаправление customErrors следующим образом:

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

Однако это приведет к раздражающей строке запроса с исходным путем и сегментом.

Если это приложение ASP.NET, вы можете перегрузить событие Application_Error в файле Global.asax.cs.Вот хакерский способ сделать это в MVC:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...