webapi:找到了与请求匹配的多个操作

时间:2014-03-08 11:49:37

标签: asp.net-web-api

我似乎无法使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方法都匹配。它不使用动作名称。

请你告诉我我哪里出错了。

由于

2 个答案:

答案 0 :(得分:0)

我会尝试删除三条路线中的第一条,你似乎不需要它,因为第二条路线中的{id}是可选的。这会解决你的问题吗?

答案 1 :(得分:0)

好的,我已经设法解决了,我发布的上面的代码实际上是好的,我实际上在routeconfig和WebapiConfig中加倍了我的路由配置。