一个Web api控制器中的多个Post操作

时间:2013-08-01 09:01:35

标签: asp.net-mvc asp.net-web-api

我有一个Web Api控制器,其中3个帖子操作是动作:

public HttpResponseMessage PostNewRecomendation([FromBody] PostNewRecomendationMessage newRecomendation) 
public HttpResponseMessage LikeRecomendation([FromBody] LikePostMessage likeRecomendationMessage) 
public HttpResponseMessage UnlikeRecomendation([FromBody] UnLikePostMessage unlikeRecomendationMessage)

我收到一条错误消息,指出有多个操作对同一个溃败有效。在四处寻找解决方案之后,我为你的行动添加了特定的路由,这些行为不起作用:

config.Routes.MapHttpRoute("PostNewRecomendation", "api/{controller}/PostNewRecomendation/");
        config.Routes.MapHttpRoute("LikeRecomendation", "api/{controller}/LikeRecomendation/");
        config.Routes.MapHttpRoute("UnlikeRecomendation", "api/{controller}/UnlikeRecomendation/");

我还尝试将ActionName属性添加到认为它与我编写的路由匹配的操作中,但仍然没有。

任何人都可以帮我做这项工作吗?

由于

阿米特

1 个答案:

答案 0 :(得分:1)

很明显,网址的第三部分,例如PostNewRecomendation符合操作的名称,但路由系统不会自动匹配此操作。因此,您必须告诉路由系统必须使用哪个操作。

 config.Routes.HttpRoute("PostNewRecomendation", "api/{controller}/PostNewRecomendation/", new { action = "PostNewRecomendation" });

您还可以将三条路线缩减为一条:

 config.Routes.HttpRoute("ApiRoute", "api/{controller}/{action}");

我更喜欢使用attribute-routing-framework,因为它更容易,特别是如果你有很多复杂的路线。