2016-08-29 4 views
0

У меня есть следующий маршрут:Asp.NET Web Api 2 Routing

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{service_name}/{controller}/{id}", 
       defaults: new { service_name = "identity", id = RouteParameter.Optional } 
      ); 

Я хочу этот маршрут, чтобы работать только со следующим шаблоном (имя службы всегда должна быть личность):

api/identity/{anyController}/{id} 

Теперь я мог бы сделать это, просто изменив свой шаблон маршрута к

routeTemplate: "api/identity/{controller}/{id}", 

, но тогда я не смог бы прочитать «Servi ce_name "от Request.GetRouteData();, так как это не названный параметр.

Есть ли более простой способ сделать это, а не создавать ActionFilter, который будет фильтровать все запросы, имя службы которых не является «Идентичность» в этом случае.

+0

Невозможно понять, если вы переходите на «api/identity/{controller}/{id}», нет имени_сервера)) –

+0

@ ElvinMammadov, если вы жестко задаете шаблон для 'api/identity', когда вы пытаетесь проверить имя_службы в словаре RouteData нет записи с ключом 'service_name'. – Robert

+0

Вместо использования конфигурации маршрута вы можете использовать маршрутизацию атрибутов. Это хороший способ настройки маршрута. –

ответ

2

Вы можете добавить атрибут Route выше метода, который затронут. Например,

[Route("api/identity/{controller}/{id}", Order = 1)] 
[HttpGet] 
public IHttpActionResult DoSomethingHere(int id) 
{ 
    // Do some magic here 
} 

Посмотрите на эту статью Attribute Routing in ASP.NET Web API 2.

+1

Я надеялся избежать беспорядка атрибутов, но я думаю, что это способ пойти – Robert