假设我有
[HttpPost]
public ActionResult<Object> Login([FromBody]LoginViewModel loginViewModel)
{
....
}
[HttpPost]
public ActionResult Logout()
{
....
}
在同一控制器中。
我得到AmbiguousActionException:多个动作匹配。 以下操作与路线数据匹配并具有所有约束 满意:
...登录
...注销
我可以简单地通过使用route属性来修复它,但是我不明白为什么core不绑定它。我的意思是签名不同。 ?
答案 0 :(得分:0)
Web API的路由机制,Core和.NET框架都以相同的方式工作。首先,他们考虑控制器名称,然后寻找正确的http方法,最后,查询查询字符串参数是否匹配(或与Route指定的url一起包含的参数)。因此,如果您的2个操作因从url提取的参数而有所不同,那么就不会有歧义。主体所携带的参数不会通过路由机制进行分析,即使它们是存在的事实也是如此。这是由于url传入的参数只是纯字符串-易于比较。而body是json,而对其进行分析则比较棘手。实际上,在Login方法的情况下,请求中没有参数loginViewModel-整个请求主体都被序列化为LoginViewModel对象。