Ответ 1
Просто подумайте... может ли проблема ".com" возникнуть?
У меня есть контроллер 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 адрес электронной почты без везения. Любые советы приветствуются.
Просто подумайте... может ли проблема ".com" возникнуть?
Это связано с тем, что IIS пытается отобразить специальные символы. Добавление следующего в файл web.config должно устранить проблему:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
Дополнительная информация здесь: http://www.iis.net/configreference/system.webserver/modules
Вам нужен базовый запрос URL.
[Route("api/emails")]
public HttpResponseMessage Run(string email) {...}
GET api/[email protected]