Как использовать адрес электронной почты в качестве необязательного параметра в HttpAttribute Route - PullRequest
0 голосов
/ 18 декабря 2018

Я использую VB на сайте .net web api 2, для которого включен HttpAttribute, и пытаюсь использовать адрес электронной почты в качестве необязательного параметра в определении маршрута.

Это определение маршрута вcontroller:

    <Route("someController/SomeAction/{id}/{emailAddress?}")>
    <HttpGet>
    Public Function SomeAction(ByVal id As String, Optional ByVal emailAddress As String = "") As HttpResponseMessage
        ' ..do stuff
    End Function

Если я опускаю дополнительный адрес электронной почты из пути запроса, сервер выполняет этот метод.Если я добавлю адрес электронной почты в конец пути, я получу ответ 404 Не найдено, например:

 http://myapiserver/some/action/1A2B/ ' <-- route found and the SomeAction method is executed
 http://myapiserver/some/action/1A2B/myemail@mydomain.ex ' <-- not found

Я попытался URL-адрес, кодирующий используемое значение электронной почты, но все равно получаю 404-не найдено:

http://myapiserver/some/action/1A2B/myemail%40mydomain.ex ' <-- also 404-not found

Я не могу быть первым, кто попытается отправить адрес электронной почты на сервер API.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы должны назначить какое-то действительное значение по умолчанию для необязательного параметра, так же как emailAddress. В вашем случае должно быть назначено какое-то действительное значение по умолчанию, чтобы функция выбирала это значение в случае, если вы не указали в URL.

Идя на шаг вперед, при обработке в вашей функции вы можете найти это значение по умолчанию, соответствующее emailAddress, и, если вы найдете его соответствующим, вы можете просто проигнорировать его.

0 голосов
/ 18 декабря 2018

Решение оказалось довольно простым.

Просто добавьте / в конец URL, чтобы сервер знал, что электронная почта является частью пути:

http://myapiserver/some/action/1A2B/myemail@mydomain.ex/ '<-- WORKS!

Без косой черты сервер считает, что мы ищемфайл из-за окончания .abc адреса электронной почты.

...