【发布时间】:2019-06-26 13:45:32
【问题描述】:
我有两个发布到同一个 URL 的表单:http://localhost/foo/bar
<form method="POST" action="http://localhost/foo/bar">
<input name="someId" value="123" />
</form>
<form method="POST" action="http://localhost/foo/bar">
<input name="someData" value="345435435" />
</form>
而我在FooController中有以下操作:
[HttpPost("bar")]
public IActionResult A([FromForm] string someId)
{
...
}
[HttpPost("bar")]
public IActionResult B([FromForm] string someData)
{
...
}
但我收到了AmbiguousMatchException。我正在尝试做的事情可能吗?
【问题讨论】:
-
您能考虑使用一个带有两个参数的方法吗?然后在方法内部根据需要进行分支。
-
是的,我可以,如果我不能有 2 个动作,我最终会这样做,但我认为有 2 个动作会更干净。
-
FWIW,通常最好在操作中分支调用私有方法。这实现了相同的目标(保持代码分支分开),但仍然只剩下一个端点。虽然像
ParameterContraint属性这样的东西解决了这个有限的用例,但它并不能解决这种类型的所有需求,而且它也会让你的代码更难理解,即使只是很细微的。但是,如果您经常执行此类操作,跟踪请求的去向可能会变得更加困难。 -
此外,虽然它对 MVC 的重要性不如对 API 的重要性,但仍然最好遵循 REST 准则,这将规定两种类型的请求需要两个 URL。
-
我同意这一点,但不幸的是,我们有时不得不与不遵守准则的第三方打交道
标签: c# asp.net-core routing