我似乎无法使ActionName属性产生任何影响。 webapi仍然匹配两个get方法:
路线设置如下:
public class RouteConfig
{
public static string ControllerOnly = "ApiControllerOnly";
public static string ControllerAndId = "ApiControllerAndId";
public static string ControllerAction = "ApiControllerAction";
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: ControllerOnly,
routeTemplate: "api/{controller}"
);
routes.MapHttpRoute(
name: ControllerAndId,
routeTemplate: "api/{controller}/{id}",
defaults: null, //defaults: new { id = RouteParameter.Optional } //,
constraints: new { id = @"^\d+$" } // id must be all digits
);
routes.MapHttpRoute(
name: ControllerAction,
routeTemplate: "api/{controller}/{action}"
);
}
}
,控制器是:
public class MultipleActionsproblemController : ApiController
{
// GET: api/multipleactionsproblem/method1
[ActionName("method1")]
public string Getmethod1()
{
return "method one";
}
// GET: api/multipleactionsproblem/method2
[ActionName("method2")]
public string Getmethod2()
{
return "method two";
}
}
当我尝试访问/ api / multipleactionproblem / method1或/ api / multipleactionproblem / method1时,两个get方法都匹配。它不使用动作名称。
请你告诉我我哪里出错了。
由于
答案 0 :(得分:0)
我会尝试删除三条路线中的第一条,你似乎不需要它,因为第二条路线中的{id}
是可选的。这会解决你的问题吗?
答案 1 :(得分:0)
好的,我已经设法解决了,我发布的上面的代码实际上是好的,我实际上在routeconfig和WebapiConfig中加倍了我的路由配置。