2014-01-08 46 views
1

我有我的WebApiController,名稱爲AdminDashBoard。在WebApi中添加帶有自定義動作名稱的自定義路由名稱

public class AdminDashBoardController : ApiController 
{ 
     [System.Web.Http.AcceptVerbs("GET")]  
     public HttpResponseMessage GetCaseHistory(string CaseRefId, string token) 
     { 
      **Implementation** 
     } 
} 

我能夠使用
Localhost/api/AdminDashBoard/GetCaseHistory?CaseRefId=CTcs004&token=eygk

訪問API,但我想通過自定義名稱訪問此如
Localhost/api/Cases/GetCaseHistory?CaseRefId=CTcs004&token=eygk

我在WebApiConfig定義customroutes但它不是加工。

config.Routes.MapHttpRoute("CaseHistory", "api/cases/{action}/{CaseRefId}/{token}", defaults: new { controller = "AdminDashBoard", action = "GetCaseHistory", CaseRefId = RouteParameter.Optional, token = RouteParameter.Optional });

回答

2

在您配置將解決路由:

controller => AdminDashBoard 
action => GetCaseHistory 

但請注意,因爲你已經放置/ {}行動中狂勝模板字符串,它會影響到路由的檢測預期請求URL中指定的「操作」。

你可以試試這個:

config.Routes.MapHttpRoute("CaseHistory", 
      "api/Cases/GetCaseHistory", 
      defaults: 
       new { controller = "AdminDashBoard", 
        action = "GetCaseHistory" }); 
config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

記得把你的路由默認路由之前爲默認路由將捕捉到的一個定製請求之前。

此外,您不需要在查詢字符串中將參數「CaseRefId」和「token」定義爲路由,如果您在控制器方法中定義了正確類型,則應該解決該問題。

希望這會有所幫助。

+0

它工作的魅力..感謝... – Nilesh