Net Framework, Office 365, C#, WPF, ASP.Net, Visual Studio, Programmiersprachen PC, C# Programmieren, vba, SQL Server, free source code snippets Antivirus free
#

AmbiguousActionException: Multiple actions matched

 

Diese Meldung kommt in Asp.Net MVC Core Anwendungen, wenn keine Action zum Ziel gefunden wird.

Wenn zum Beispiel keine Notes/Index Action vorhanden ist, dann kommt diese Meldung.

 

Das Problem entsteht auch, wenn man das URL Routing mixed zwischen Startup Routes und [Attribute-Routes]

Lösung: Entweder in Asp Core die URL Routen im Startup.cs definieren, oder für jede IActionResult-Methode im Controller ein Attribute voranstellen

 

An unhandled exception occurred while processing the request.

AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

 

IWois_Core.Controllers.NotesController.Details (IWois_Core)

IWois_Core.Controllers.NotesController.Create (IWois_Core)

IWois_Core.Controllers.NotesController.Edit (IWois_Core)

IWois_Core.Controllers.NotesController.Delete (IWois_Core)

IWois_Core.Controllers.NotesController.counter_NoteView_erhoehen (IWois_Core)

IWois_Core.Controllers.NotesController.counter_Note_List_erhoehen (IWois_Core)

Microsoft.AspNetCore.Mvc.Internal.ActionSelector.SelectBestCandidate(RouteContext context, IReadOnlyList<ActionDescriptor> candidates)

 

 

Attribute-Routing

Hierzu schreibt man einfach vor die Controller-Action ein Route-Attribute in Klammern wie hier

[Route("Notes")]

    public class NotesController : Controller

    {

        ..

 

        // GET: /Note Root

        [Route("")]

        [Route("Index")]

        [Route("Index_All")]

        [Route("All")]

        public async Task<IActionResult> Index_All()

        {

            ///-------------< Index_All >-------------

            ..

            //< out to view >

            //return View(data_to_View);

            return View("index_all", data_to_View);

            //</ out to view >

            ///-------------</ Index_All >-------------

        }

 

 

 

 

Problem Serverside Links

 

Beim Verwenden von Links, welche durch den Server generiert werden (Asp Net Serverside Anchor Links), dann vor dem Ausgabe-Rendern erst vom Server geprüft, ob ein Controller-Action Treffer vorhanden ist.

<a asp-action="Details" asp-route-id="@item.Note.IDNote">@Html.DisplayFor(modelItem => item.Note.Title)</a>

 

Bei korrektem Routing wird durch diesen Serverside Link eine passende URL mit Controller/Details/ID erstellt.

 

Mit dem entsprechenden Routing-Attribute im Server.

[Route("Details/{id}")]

        public async Task<IActionResult> Details(long? id)

        {

            if (id == null)

            {

                return NotFound();

            }

 

Wird das Attribute nicht definiert, aber in der Controller Datei für den Controller und den Index Action eine Attribute-Routing definiert,

dann muss auch für jedes Detail-Action ein [Attribute] Routing geschrieben werden

wird das Detail Attribute nicht geschrieben, dann wird ein Serverside-Link falsch ausgegeben

 

So wird ein Falscher Server-Seitiger Link erstellt

<a href="/Notes?id=3">3 seconds later</a>

 

Mobile
»
Asp Core Umleitung http zu https und www. Zu direkt Domain-Host
»
Asp MVC Core: URL Query Parameter
»
Asp Core MVC: neu Start-Datei definieren, Start Controller View
»
Asp MVC : HTML Links statt Asp Server Side Links
»
AmbiguousActionException: Multiple actions matched
»
Asp.Net Core MVC: Alternative URL Routen anlegen

.

Jobs, Projekte, Angebote für Freiberufler, Selbstständig an Raimund.Popp@Microsoft-Programmierer.de