500 внутренняя ошибка сервера, когда: (двоеточие) находится в конце URL-адреса WebApi. Принятие ipv6 в качестве параметра

У меня есть метод действия, который получает IP в качестве параметра.

[HttpGet]
[Route("lookup/{ipAddress}")]
public string Get(string ipaddress)
{
    return ipaddress;
}

Проблема в том, когда API вызывается с IPV6 Compact в параметре, заканчивающемся на : (двоеточие), вызов не достигает действия и получает 500 внутренних ошибок сервера без подробностей.

Работает нормально с локальным компьютером, используя VS 2013, но при развертывании в Azure, поскольку AppService IPV6 выдает внутреннюю ошибку сервера.

Уже добавил requestPathInvalidCharacters

<system.web>
    <compilation debug="true" targetFramework="4.5" />
    <customErrors mode="Off" />
    <httpRuntime targetFramework="4.5" requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?" />
</system.web>

А также установить

<modules runAllManagedModulesForAllRequests="true">

Хорошо работает на локальных IIS и IIS Express, но при развертывании на веб-сайте Azure API не работает.

1 ответ

Не могли бы вы попробовать:

Измените строку конфигурации на <... requestValidationMode = "2.0" requestPathInvalidCharacters = "*,:, &, \"...>, что происходит? Эта проблема обсуждается в Интернете, и есть несколько способов ее устранения, например, здесь:

http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

Использование двоеточия (:) в URL с ASP.NET/IIS

ASP.NET MVC Colon в URL

2) Кодировать / декодировать его в другой символ Юникода

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