c# - für - meta title länge 2018



Wie kann ich AmbiguousMatchException zwischen zwei Controller-Aktionen vermeiden? (4)

Ich habe zwei Controller-Aktionen mit dem gleichen Namen, aber unterschiedlichen Methodensignaturen. Sie sehen so aus:

    //
    // GET: /Stationery/5?asHtml=true
    [AcceptVerbs(HttpVerbs.Get)]
    public ContentResult Show(int id, bool asHtml)
    {
        if (!asHtml)
            RedirectToAction("Show", id);

        var result = Stationery.Load(id);
        return Content(result.GetHtml());
    }

    //
    // GET: /Stationery/5
    [AcceptVerbs(HttpVerbs.Get)]
    public XmlResult Show(int id)
    {
        var result = Stationery.Load(id);
        return new XmlResult(result);
    }

Meine Komponententests haben kein Problem beim Aufrufen der einen oder anderen Controller-Aktion, aber meine Test-HTML-Seite löst eine System.Reflection.AmbiognitiveMatchException aus.

<a href="/Stationery/1?asHtml=true">Show the stationery Html</a>
<a href="/Stationery/1">Show the stationery</a>

Was muss geändert werden, damit dies funktioniert?


Es gibt das ActionName Attribut. Schau mal.


Es gibt zwei Möglichkeiten, dies zu beheben:

1> Ändern Sie den Methodennamen. 2> Stellen Sie den beiden Methoden unterschiedliche ActionName-Attribute zur Verfügung. Sie können ein eigenes Attribut definieren.


Um dieses Problem zu beheben, können Sie ein ActionMethodSelectorAttribute schreiben, das die MethodInfo für jede Aktion überprüft und sie mit den veröffentlichten Formularwerten vergleicht und dann jede Methode zurückweist, für die die Formularwerte nicht übereinstimmen (mit Ausnahme des Schaltflächennamens).

Hier ein Beispiel: - http://blog.abodit.com/2010/02/asp-net-mvc-ambiguous-match/

Sie könnten auch ein einfacheres ActionMethodSelectorAttribute das nur auf den Namen der Übergabeschaltfläche schaut, aber das würde Ihren Controller binden und genauer anzeigen.






controller