2016-08-29 94 views
0

我有以下途徑:Asp.NET網頁API 2路由參數

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}", 

但後來我無法讀取「服務_name「從Request.GetRouteData();,因爲它不是命名參數。

有沒有更簡單的方法來做到這一點,而不是創建一個ActionFilter,它將過濾所有在這種情況下服務名稱不是「Identity」的請求。

+0

無法理解,如果您更改爲「api/identity/{controller}/{id}」,則不存在service_name)) –

+0

@ElvinMammadov如果您嘗試檢查service_name時將模板硬編碼爲'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