ASP.NET Core Web API具有相同动作动词但签名不同的多个动作

时间:2018-08-11 16:07:33

标签: c# asp.net asp.net-web-api asp.net-core-webapi asp.net-core-2.1

假设我有

[HttpPost]
public ActionResult<Object> Login([FromBody]LoginViewModel loginViewModel)
  {
    ....
  }

[HttpPost]
public ActionResult Logout()
  {
    ....
  }

在同一控制器中。

  

我得到AmbiguousActionException:多个动作匹配。   以下操作与路线数据匹配并具有所有约束   满意:               
              
...登录               
...注销

我可以简单地通过使用route属性来修复它,但是我不明白为什么core不绑定它。我的意思是签名不同。 ?

1 个答案:

答案 0 :(得分:0)

Web API的路由机制,Core和.NET框架都以相同的方式工作。首先,他们考虑控制器名称,然后寻找正确的http方法,最后,查询查询字符串参数是否匹配(或与Route指定的url一起包含的参数)。因此,如果您的2个操作因从url提取的参数而有所不同,那么就不会有歧义。主体所携带的参数不会通过路由机制进行分析,即使它们是存在的事实也是如此。这是由于url传入的参数只是纯字符串-易于比较。而body是json,而对其进行分析则比较棘手。实际上,在Login方法的情况下,请求中没有参数loginViewModel-整个请求主体都被序列化为LoginViewModel对象。