【问题标题】:Multiple actions in Routing config, nothing helps路由配置中的多个操作,没有任何帮助
【发布时间】:2015-04-10 22:47:27
【问题描述】:

我有一个名为 Users 的 ApiController 默认情况下,我在那里有 Post。 它工作正常。

但是,我决定添加一个同样适用于 Post 方法的附加操作,现在我有了以下代码:

[HttpPost]
public HttpResponseMessage Post(dynamic data){}

[HttpPost]
public HttpRequestMessage LogOff([FromBody]dynamic data){}

我还修改了路由,尝试了此处注释的每个选项: //config.Routes.MapHttpRoute( // name: "UserApi", // routeTemplate: "api/Users/LogOff/{data}/{id}", // 默认值:new { id = RouteParameter.Optional } //);

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

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

我也玩过切换他们的订单位置,没有结果,它总是说:web api Multiple actions were found that match....

【问题讨论】:

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


    【解决方案1】:

    在我看来,问题在于:不可能将 Noname 动作(如标准 Post)和命名的 Post 动作混合在一起。 作为一个例子,我创建了 2 个命名操作,它们都适用于 Post 并且它们工作正常,但是原始 Post 停止工作...... 这很奇怪,因为路由是正确的,而且我有两种选择:有和没有 {action}

    【讨论】:

      【解决方案2】:

      在下一个链接 (http://www.codeproject.com/Articles/624180/Routing-Basics-in-ASP-NET-Web-API) 中,您可以解释为什么这不起作用。我将向您展示解释您的代码为何不起作用的部分:

      与熟悉的 MVC 路由模板不同,Web API 模板没有 指定一个 {action} 路由参数。这是因为,正如我们提到的 早些时候,Web API 框架将默认映射传入的请求 到基于请求的 HTTP 动词的适当操作。

      所以你不能有两个方法使用相同的动词(在这种情况下是 POST)和相同的参数。

      如果你想实现它,一个解决方案是使用属性路由。下面的代码就是一个例子:

      [RoutePrefix("users")]
      public class UsersController : ApiController
      {
          [HttpPost]
          [Route("post")]
          public HttpResponseMessage Post(dynamic data){}
      
          [HttpPost]
          [Route("logoff")]
          public HttpRequestMessage LogOff([FromBody]dynamic data){}
      
      }
      

      如果你要使用这个解决方案,你必须在你的 WebApiConfig 中添加这行代码。

      config.Routes.MapHttpAttributeRoutes();
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 2018-09-04
        • 1970-01-01
        • 2017-09-18
        • 1970-01-01
        • 2014-10-12
        • 2011-08-28
        相关资源
        最近更新 更多