2016-05-23 146 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) 
     } 
); 
相关问题