Символ канала в параметре маршрута ASP.NET, вызывающий 404

У нас есть метод ASP.NET Web API со следующим маршрутом:

[System.Web.Http.Route( "api/MergeFields/{id}" )]
public virtual string Get( string id )
{
    ...
}

На большинстве наших серверов, если параметр {id} в URL содержит символ канала, он все равно будет соответствовать маршруту: http://www.example.com/api/MergeFields/Global%7CTest. Однако у нас есть один IIS-сервер, на котором это возвращает ошибку 404.

Кодировка символа канала не помогает: http://www.example.com/api/MergeFields/GlobalAttribute%7CTest, он по-прежнему возвращает 404.

На этом же сервере все остальные символы в параметре {id} работают нормально. Например, работает http://www.example.com/api/MergeFields/GlobalAttribute_Test.

Я искал в файле web.config что-то, что могло бы повлиять на то, как символ канала интерпретируется IIS или ASP.NET, но не смог ничего найти. Опять же, это только один сервер, который имеет эту проблему. На всех других наших установках персонаж трубы работает нормально и соответствует этому маршруту.

1 ответ

Решение

Я не могу комментировать, но я даю ему шанс в качестве решения.
Пожалуйста, дайте мне знать, если это не работает.

Проверьте свойство HttpRuntimeSection.RelaxedUrlToFileSystemMapping, это может быть проблемой.

Под вашим web.config вы, вероятно, должны настроить его следующим образом (.NET 4.0):

<system.web>
   <httpRuntime requestValidationMode="2.0" relaxedUrlToFileSystemMapping="true"/>
</system.web>

Я не знаю о вашей среде, но я предполагаю, что вы используете 4.0.

Edit2:
Также прочитайте о фильтрации запросов (услуга, которая, вероятно, блокирует запрос). Полезная информация и, возможно, несколько других глаголов, которые вы можете использовать для "белого" списка символов канала: https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/

Редактировать:
К вашему сведению, труба определяется как "небезопасный символ". Я рекомендую прочитать этот документ относительно выбора символов разделителя: https://sites.google.com/site/getsnippet/javascript/ut/url-encoded-characters/-please-stop-using-unsafe-characters-in-urls

Другие вопросы по тегам