Подтвердить что ты не робот

Метод WebApi с параметром адреса электронной почты возвращает 404 из HttpClient

У меня есть контроллер WebApi со способом, который выглядит так:

[HttpGet]
[AcceptVerbs("GET")]
public HttpResponseMessage Run(string reportName, int someId, string someText, DateTime asOfDate, string username)

У меня есть настраиваемый маршрут, настроенный специально для этого действия. Когда я перемещаю свой браузер в веб-службу, все работает нормально, и выполняется соответствующее действие:

http://localhost:xxxx/ControllerName/Run/asdf/1/asdf/07-01-2012/[email protected]

Однако, когда я пытаюсь программно вызвать веб-службу с помощью HttpClient и выполнить "Get", я получаю ошибку 404. Я не получаю сообщение об ошибке, когда параметр имени пользователя не является адресом электронной почты. Например, когда имя пользователя просто "пользователь", все работает нормально. Вот пример кода:

var url = "http://localhost:xxxx/ControllerName/Run/asdf/1/asdf/07-01-2012/[email protected]"
var client = new System.Net.Http.HttpClient();
var response = client.Get(url);

//fails here with 404 error
response.EnsureSuccessStatusCode();

Я пробовал UrlEncoding адрес электронной почты без везения. Любые советы приветствуются.

4b9b3361

Ответ 1

Просто подумайте... может ли проблема ".com" возникнуть?

Ответ 2

Это связано с тем, что IIS пытается отобразить специальные символы. Добавление следующего в файл web.config должно устранить проблему:

<system.webServer>  
     <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

Дополнительная информация здесь: http://www.iis.net/configreference/system.webserver/modules

Ответ 3

Вам нужен базовый запрос URL.

[Route("api/emails")]
public HttpResponseMessage Run(string email) {...}

GET api/[email protected]