我有一个路由问题,我无法弄清楚如何解决它。只能使用不同名称的函数可以使用Web api路由吗?
有一个名为“UsersController”控制器,它包含2 POST操作功能:
public int PostFBLogin(User userObject){}
public void PostUpdateImgUrl(User userObject){}
当我做一个POST请求,我通过“用户”的JSON表示请求体。 如果我注释掉其中一个函数,那么它工作正常。 但是当两种功能存在,每当我试图让他们中的每一个要求,我得到以下错误:
"Multiple actions were found that match the request:
Int32 PostFBLogin(MestoryServer.Models.User) on type MestoryServer.Controllers.UsersController
Void PostUpdateImgUrl(MestoryServer.Models.User) on type MestoryServer.Controllers.UsersController"
我试图通过将以下途径在路由表来解决这个问题:
RouteTable.Routes.MapHttpRoute(
name: "UserPostUpdateImgUrlAction",
routeTemplate: "api/users/PostUpdateImgUrl/",
defaults: new
{
controller = "users",
action = "PostUpdateImgUrl"
}
);
RouteTable.Routes.MapHttpRoute(
name: "UserPostFBLoginAction",
routeTemplate: "api/users/PostFBLogin/",
defaults: new
{
controller = "users",
action = "PostFBLogin"
}
);
但它没有帮助。
看了很多关于互联网路由表的帖子后,我不确定甚至有可能有两个具有相同签名但名称不同的操作。
任何人都可以帮忙吗?
谢谢, Edi。
所以现在我试图使用以下路由: RouteTable.Routes.MapHttpRoute(name:“ActionApi”,routeTemplate:“api/{controller}/{action}/{id}”,默认值:new {id = RouteParameter.Optional} ); 我也把[HttpPost]放在两个函数上。但我仍然得到同样的错误。 – Edi 2012-07-12 22:26:25
这应该工作。这可能是由路线冲突造成的。您是否添加了新路线而不是更改默认路线?在这种情况下,需要在没有采取行动的路线之前指定具有行动的路线。 – Martin4ndersen 2012-07-13 06:33:38
太棒了!现在它工作了! 实际上在Application_Start中没有任何DefaultApi路由。它已经在路由列表中。所以我不得不在列表中的DefaultApi路由之前插入新路由 - 就像你说的那样。 – Edi 2012-07-13 06:51:52