AmbiguousActionException:匹配多个动作。 以下操作匹配路由数据并满足所有约束
我正在使用ASP.NET Core MVC创建一个网站。 当我点击某个动作时,我收到此错误:
AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied: Web.Controllers.ChangeEventsController.Create (Web) Web.Controllers.ProductsController.CreateChangeEvent (Web)
这就是我在我的ProductsController的index.cshtmlm中定义我的动作的方法:
Create Change Event
这是我的路线:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
以下是我定义操作的方式:
// ChangeEventsController [HttpGet("{id}")] public IActionResult Create(Guid id) // ProductsController [HttpGet("{id}")] public IActionResult CreateChangeEvent(Guid id)
我做错了什么?
更新
感谢@MegaTron的回复,但是我想知道为什么我不能为不同的控制器提供相同的操作路径。 如果我有许多控制器,每个创建实体,我觉得你提出的解决方案不会很好地扩展。
尝试:
// ChangeEventsController [HttpGet("Create/{id}")] public IActionResult Create(Guid id) // ProductsController [HttpGet("CreateChangeEvent/{id}")] public IActionResult CreateChangeEvent(Guid id)
在每个控制器上方添加[Route("api/[controller]")]
属性以使操作路径位于不同的路径下,然后您可以在每个控制器中使用相同的[HttpGet("{id}")]
。 这应该很好地扩展。 请参阅microsoft docs中的此示例。
如果不使用[Route]
批注为每个控制器指定路由,则ASP.NET Core MVC无法知道选择处理请求的操作。
- 在ASP .NET 5中默认阻止匿名访问
- 如何在.NET Core中对Startup.cs进行unit testing
- 实体类型上的导航尚未添加到模型中,或被忽略,或者实体类型被忽略
- ASP.NET核心中的FromUriAttribute替换 – 专门用于参数别名?
- ASP.NET 5(vNext)Web项目:库冲突从beta4升级到beta6
- dotnet core方法’ValidateOptions’…没有实现
- ASP.NET Core Identity不会注入UserManager
- 在visual studio 2015下以x86启动asp.net核心项目
- 如何解决.net核心构建错误NETDSDK1061和警告MSB3277