2016-05-23 147 views
0
的Web API定製路由

我們正在努力實現我們的API VersionedRoutes和正在申報的一類我們的路線:具有相同名稱但不同的HTTP方法

new VersionedRoute(
    version, 
    "GetRiskReports", 
    "/Members/{id}/Cpin/RiskReports", 
    new RouteValueDictionary 
    { 
     {"controller", "Members"}, 
     {"action", "GetRiskReports"}, 
     {"id", RouteParameter.Optional} 
    }), 
new VersionedRoute(
    version, 
    "PostRiskReports", 
    "/Members/{id}/Cpin/RiskReports", 
    new RouteValueDictionary 
    { 
     {"controller", "Members"}, 
     {"action", "PostRiskReports"}, 
     {"id", RouteParameter.Optional} 
    }) 

控制器方法聲明如下:

[HttpGet] 
public HttpResponseMessage GetRiskReports(int id) 

[HttpPost] 
public HttpResponseMessage PostRiskReports(int id) 

明顯的那一刻,GET請求到URL /成員/ 123/CPIN/RiskReports路由通過與第一路線確定,但一POST請求失敗路由的,因爲它與第一路線,但該控制器的方法相匹配被標記爲僅GET。無論如何要將HTTP方法添加到自定義路線。客戶端不想更改路由名稱。

回答

1

在你RouteConfig.cs,註冊這樣的配置:

config.Routes.MapHttpRoute("GetRiskReports", "Members/{id}/Cpin/RiskReports" , 
     new { 
      controller = "Members", 
      action = "GetRiskReports" 
     }, 
     new { 
      HttpMethod = new HttpMethodConstraint(HttpMethod.Get) 
     } 
); 

config.Routes.MapHttpRoute("PostRiskReports", "Members/{id}/Cpin/RiskReports" , 
     new { 
      controller = "Members", 
      action = "PostRiskReports" 
     }, 
     new { 
      HttpMethod = new HttpMethodConstraint(HttpMethod.Post) 
     } 
); 
相關問題