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

时间:2015-06-10 17:56:38

标签: asp.net-mvc c#-4.0 asp.net-web-api

你找到了许多有用的链接来解决这个问题,但没有什么对我有用:(。任何人都可以看看我出错了吗?

控制器:

[ActionName("savebook")]
        [HttpPost]
        public HttpResponseMessage PostSaveBook([FromBody]Book product)
        {
            return Add(product);


        }

        [ActionName("savemobile")]
        [HttpPost]
        public HttpResponseMessage PostSaveMobile([FromBody]Mobile product)
        {
            return Add(product);

        }

WebApiRouteConfig。

 config.Routes.MapHttpRoute(
    name: "ControllerOnly",
    routeTemplate: "api/{controller}"
);

            // Controller with ID
            // To handle routes like `/api/VTRouting/1`
            config.Routes.MapHttpRoute(
                name: "ControllerAndId",
                routeTemplate: "api/{controller}/{id}",
                defaults: null,
                constraints: new { id = @"^\d+$" } // Only integers 
            );

            // Controllers with Actions
            // To handle routes like `/api/VTRouting/route`
            config.Routes.MapHttpRoute(
                name: "ControllerAndAction",
                routeTemplate: "api/{controller}/{action}"
            );

错误:

**

  

" ExceptionMessage":"发现多个匹配的动作   请求:

**

1 个答案:

答案 0 :(得分:0)

您注册的第一条路线是RESTful样式路线,它不包含{action}段。

由于路径的评估顺序与它们的注册顺序相同,因此无论何时发送POST请求,控制器名称都将从URL中获取,然后,操作选择器将查找名称以{开头的操作{1}}。在您的情况下,有两种行为符合这一条件:PostPostSaveBook

如果第一个注册路由是PostSaveMobile路由,则会从URL中获取操作,操作选择器可以正确选择所需操作。

如果您想使用RESTful样式,则必须使用attribute routing来消除歧义。