2016-11-24 5 views
6

संतुष्ट थीं मैं एएसपी.नेट कोर एमवीसी का उपयोग कर एक वेबसाइट बना रहा हूं।अस्पष्ट क्रिया अपवाद: एकाधिक क्रियाएं मेल खाते हैं। निम्नलिखित कार्रवाइयां मार्ग डेटा से मेल खाती हैं और सभी बाधाएं

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 में मेरी कार्रवाई परिभाषित किया गया है:: जब मैं एक कार्रवाई पर क्लिक करें मैं इस त्रुटि मिलती है

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

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

यहाँ मेरी मार्ग है

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

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

यहाँ कैसे मैं कार्रवाई में परिभाषित किया गया है

मैंने क्या गलत किया है?

अद्यतन

आपकी प्रतिक्रिया के लिए धन्यवाद @MegaTron, हालांकि मुझे पता है कि मैं क्यों अलग नियंत्रकों के लिए एक ही कार्रवाई पथ नहीं हो सकते करना चाहते हैं। मुझे लगता है कि आपके द्वारा प्रस्तावित समाधान अच्छी तरह से स्केल नहीं करेगा यदि मेरे पास कई नियंत्रक हैं जो प्रत्येक संस्था बनाते हैं।

+2

आप IShouldNotNeedThisIThink मार्ग घोषणा की जरूरत नहीं है। – Klinger

+0

क्या मुझे उस मार्ग की आवश्यकता है? – Zeus82

+0

सबसे सरल मामले में आपको केवल डिफ़ॉल्ट की आवश्यकता है। – Klinger

उत्तर

10

प्रयास करें:

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

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

ऐसा क्यों है कि अलग-अलग नियंत्रक के पास समान क्रिया नाम नहीं हो सकता है? – Zeus82

संबंधित मुद्दे