Пользовательская страница ошибки для «Недопустимые символы в пути»

Пользовательская страница ошибок, которую я установил в web.config, не отображается, когда возникает ошибка «Недопустимые символы в пути». Это работает для других ошибок сервера, поэтому я не уверен, что я могу что-то сделать?

Пример запроса, в котором правильно отображается пользовательская страница ошибок: website.com/3f.jsp

Пример запроса, в котором нет: website.com/%3f.jsp

Web.config: <customErrors mode="On" defaultRedirect="ErrorDisplay.aspx"></customErrors>

Stacktrace (customErrors выключен)

[ArgumentException: Illegal characters in path.]
   System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String[] str) +276
   System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) +88
   System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath) +43
   System.IO.Path.GetFullPath(String path) +82
   System.Web.HttpApplication.CheckSuspiciousPhysicalPath(String physicalPath) +19
   System.Web.Configuration.HttpConfigurationSystem.ComposeConfig(String reqPath, IHttpMapPath configmap) +175
   System.Web.HttpContext.GetCompleteConfigRecord(String reqpath, IHttpMapPath configmap) +434
   System.Web.HttpContext.GetCompleteConfig() +49
   System.Web.HttpContext.GetConfig(String name) +195
   System.Web.CustomErrors.GetSettings(HttpContext context, Boolean canThrow) +20
   System.Web.HttpResponse.ReportRuntimeError(Exception e, Boolean canThrow) +39
   System.Web.HttpRuntime.FinishRequest(HttpWorkerRequest wr, HttpContext context, Exception e) +486

Я попытался вручную поймать ошибку в обработчике Global.asax Application_Error, но он так и не был вызван. Application_BeginRequest даже не вызывается, когда есть недопустимые символы, так где же IIS выдает эту ошибку и есть ли способ отобразить пользовательскую страницу?

Согласно этой статье может мне не повезло.


person MisterIsaak    schedule 10.03.2014    source источник


Ответы (1)


Как показывает ваша трассировка стека, и вы заметили, что Application_BeginRequest не вызывается, эта ошибка возникает при обработке запросов IIS еще до того, как код вашего приложения вызывается - ответ на ваш первый вопрос: поэтому ваша реализация Web.config и Application_Error не рассматривается.

На это же указывает связанное обсуждение на форумах ASP.NET.

На моем локальном сервере IIS (7.5) я возвращаюсь...

Неверный запрос — неверный URL-адрес

Ошибка HTTP 400. Недопустимый URL-адрес запроса.

... для URL-адреса http://localhost/%&what.

Любопытно, я попытался установить статическую пользовательскую страницу ошибок для кода состояния HTTP 400 на страницах ошибок моего локального сервера в диспетчере IIS, а также настроить мой локальный сервер для использования пользовательских страниц ошибок для локальных и удаленных запросов; но я никогда не видел пользовательскую страницу ошибки, которую я установил для этой конкретной ошибки.

В статье TechNet объясняется, почему:

Вы не можете настроить следующие ошибки HTTP: 400, 403.9, 411, 414, 500, 500.11, 500.14, 500.15, 501, 503 и 505.

Итак, я думаю, что ответ на ваш второй вопрос: нет, IIS не предоставляет вам возможности отобразить для этого пользовательскую страницу ошибки.

person J0e3gan    schedule 10.03.2014
comment
Я думаю, вы правы, хорошая находка и в статье TechNet! Я также пытался указать пользовательскую страницу для 500 и т. д. через IIS и web.config. Но ни один из них, похоже, не взял, что, я думаю, имеет смысл с тем, что отмечено в статье TechNet. - person MisterIsaak; 10.03.2014