Персонализирана страница за грешка за „Незаконни знаци в пътя“

Персонализираната страница за грешка, която зададох в web.config, не се показва, когато се появи грешка „Незаконни знаци в пътя“. Работи за други сървърни грешки, така че не съм сигурен дали има нещо, което мога да направя?

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

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

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

Stacktrace (customErrors Off)

[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 Manager, като също така конфигурирах моя локален сървър да използва персонализирани страници за грешка за локални и отдалечени заявки; но никога не видях персонализираната страница за грешка, която зададох за тази конкретна грешка.

статия в 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