2016-06-29 8 views
0

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

public class AccountsController : ApiController 
{ 
    [HttpGet, Route("accounts/{username}")] 
    public IHttpActionResult Get(string username) 
    { 
     return Ok(); 
    } 
} 

Я могу выполнить HTTP GET /accounts/test%40testing и получить ответ OK.

Когда я пытаюсь сделать аналогичный запрос с квалифицированным именем пользователя, действие на контроллере не ударяется; HTTP GET /accounts/user%40testing.org получает ответ 404. Я могу видеть запрос, входящий в промежуточное ПО OWIN приложения, поэтому я уверен, что он выводит его из хоста в код .NET.

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

Как я могу получить эти значения, переданные в действие?

+0

Возможный дубликат [ApiController возвращает 404, когда идентификатор содержит период] (http://stackoverflow.com/questions/13298542/apicontroller-returns-404-when-id-contains-period) –

ответ

1

Добавить другой маршрут.

[Route("accounts/{username}.{ext}")] 

Период пытается направить его в файл, если нет подходящих маршрутов не будут найдены в результате чего 404. Таким образом, вы должны явно создать маршрут с периодом, чтобы поймать его. Затем просто используйте логику в методе concat username и ext back together и вызовите существующую логику.

Смежные вопросы