2016-11-24 4 views
6

Tworzę witrynę za pomocą ASP.NET Core MVC. Gdy klikam na działanie otrzymuję ten błąd:AmbiguousActionException: Wiele akcji pasujących do siebie. Następujące akcje pasowały do ​​danych trasy i zostały spełnione wszystkie ograniczenia.

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) 

Oto jak zdefiniowano moje działanie w index.cshtmlm dla mojego ProductsController:

<a asp-controller="ChangeEvents" asp-action="Create" asp-route-id="@item.Id">Create Change Event</a> 

Oto mój routingu:

 app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 

Oto jak zdefiniowano działania:

// ChangeEventsController 
[HttpGet("{id}")] 
public IActionResult Create(Guid id) 

// ProductsController 
[HttpGet("{id}")] 
public IActionResult CreateChangeEvent(Guid id) 

Co zrobiłem źle?

Aktualizacja

Dzięki @MegaTron za odpowiedź, ale chciałbym wiedzieć, dlaczego nie mogę mieć tę samą ścieżkę działań dla różnych kontrolerów. Czuję, że proponowane rozwiązanie nie będzie skalowane, jeśli mam wiele kontrolerów, z których każdy tworzy jednostki.

+2

Nie trzeba IShouldNotNeedThisIThink deklarację trasy. – Klinger

+0

Czy potrzebuję tej trasy? – Zeus82

+0

W najprostszym przypadku potrzebujesz tylko domyślnego. – Klinger

Odpowiedz

10

Spróbuj:

// ChangeEventsController 
[HttpGet("Create/{id}")] 
public IActionResult Create(Guid id) 

// ProductsController 
[HttpGet("CreateChangeEvent/{id}")] 
public IActionResult CreateChangeEvent(Guid id) 
+5

Dlaczego inny kontroler nie może mieć tej samej nazwy akcji? – Zeus82

Powiązane problemy