2015-08-07 5 views
1

Обзор:MVC Url Request - Недопустимые символы в пути

  • 404 страница ошибки настраивается в web.config и работает
  • Использование Umbraco v6.2
  • CustomErrors устанавливаются RemoteOnly

Проблема заключается в том, что я помещаю «% 7C» в URL-адрес, я получаю следующее:

Illegal characters in path. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Illegal characters in path. 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace:  

[ArgumentException: Illegal characters in path.] 
    System.IO.Path.GetExtension(String path) +14365864 
    Umbraco.Core.UriExtensions.IsClientSideRequest(Uri url) +23 
    Umbraco.Web.UmbracoModule.BeginRequest(HttpContextBase httpContext) +365 
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165 

% 7C - это труба "|". % 7C - единственный (который я пробовал), который дает мне YSOD.

Если я положил что-нибудь (я пробовал 30 + комбинации), например% 7A,% 2A, то иногда он даст мне эту ошибку без перехода на страницу 404, но никогда YSOD:

Bad Request - Invalid URL 

HTTP Error 400. The request URL is invalid. 

web.config

<customErrors mode="RemoteOnly" defaultRedirect="~/error-page" />

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <remove statusCode="500" subStatusCode="-1" /> 
    <remove statusCode="503" subStatusCode="-1" /> 
    <error statusCode="404" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" /> 
    <error statusCode="500" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" /> 
    <error statusCode="503" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" /> 
</httpErrors> 

В Umbraco есть файл конфигурации (umbracoSettings.config), в котором есть раздел XML, в котором размещается символ.

Пример:

<char org="~"></char> 
    <char org=" ">-</char> 
    <char org="&quot;"></char> 
    <char org="'"></char> 
    <char org="%"></char> 
    <char org="."></char> 
    <char org="|"></char> 

Вы можете видеть, что труба находится там. Если я укажу URL,

local.website.com/asdf| (обратите внимание на трубу), он закодирован в local.website.com/asdf%7C.

Я попытался добавить <char org="%7C"></char>, но это не сработает. Я что-то упускаю? Это известная ошибка?

ответ

0

Это не проблема, связанная с ошибкой или Umbraco, так как ASP.NET проверяет, что URL-адрес в HTTP-запросе является допустимым файловым файлом Windows.

Вы можете получить вокруг него с помощью

<httpRuntime relaxedUrlToFileSystemMapping="true" /> 

По documentation:

Свойство RelaxedUrlToFileSystemMapping определяет, как URL в входящий запрос HTTP будет подтверждена. Если это свойство ложно, URL-адрес проверяется с использованием тех же правил, которые определяют, действителен ли путь файловой системы Windows .

+0

Это сейчас в моем web.config. Под '' –

0

Пришли, чтобы добавить в Интернет.CONFIG

<remove statusCode="400" subStatusCode="-1" /> 
    <error statusCode="400" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" /> 

Кроме того, когда я повернулся на ошибки customErrors="On" эта ошибка ушла.

Если у кого-то есть лучшая альтернатива или рассуждения позади этого, я открыт для предложений

Смежные вопросы