Wep api маршрутизация не работает - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующий веб-интерфейс asp.net на моем сервере, который должен принимать номер телефона или адрес электронной почты в качестве имени пользователя для входа в систему. Он отлично работает с адресом электронной почты и номером телефона без префикса «+». номер телефона имеет + этот API никогда не получит.

Префикс маршрута класса: [RoutePrefix("api/Account")]

[HttpPost]
[HttpOptions]     
[Route("{UserName}/ResetCode")]
public IHttpActionResult ResetCode([FromUri]string userName, [FromUri]string lan = null)
{
    service.ResetCode(userName, language);
    return Ok();
}

Запрос Fiddler: с + в телефонном номере:

http://localhost:56771/api/Account/%2B18888888888/ResetCode?lan=en-US

Это не касается моего API.

Запрос Fiddler без +:

http://localhost:56771/api/Account/18888888888/ResetCode?lan=en-US

Этот URL попадает на службу.

Запрос Fiddler с электронной почтой:

http://localhost:56771/api/Account/abc%40GMAIL.COM/ResetCode?lan=en-US

Этот URL попадает в сервис.

Что может быть причиной того, что первый URL (указанный выше) не может подключиться к службе.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 30 апреля 2018

Возможно, что %2B в URL-адресе получено или понято как +, что затем переводится в пробел.

Вы можете попытаться предотвратить это, также зашифровав знак %, известный как двойное кодирование. + затем становится %252B. Дайте мне знать, если это поможет.

Обновление, чтобы сделать ответ более полным (с благодарностью J.H.):

Вам также необходимо убедиться, что в Web.Config присутствует следующая настройка.

<system.webserver>
    <security>
        <requestFiltering allowDoubleEscaping="true">
    </security>
</system.webserver>

Подробнее об этом см., Например, этот ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...