Frage

muß ich den HttpVerb Zwang in meiner Routendefinition registrieren (wenn i Routen ist Registrierung), wenn ich meine Aktionsmethode dekoriert mit dem [AcceptVerbs (..)] Attribute schon?

zB. Ich habe diese.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection)
{ .. }

brauche ich, um diese auf die Route hinzuzufügen, die zu dieser Aktion bezieht, als Zwang?

War es hilfreich?

Lösung

Der Unterschied zwischen den beiden ist die folgende:. Lassen Sie uns die Create Verfahren in Frage annehmen, ist auf der HomeController

hat das AcceptVerbs Attribut nicht Routing beeinflussen. Es ist tatsächlich etwas von der Aktion Aufrufer verwendet. Was es Ihnen erlaubt, 2 Action-Methode mit dem gleichen Namen auf einem Controller zu tun hat, die jeweils auf eine andere HTTP-Methode reagieren.

public ActionResult Create(int id) { .. }

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection) { .. }

Also, wenn ein Antrag auf /home/create kommt, wird die Route anzeigen lassen und die Anforderung an den Aufrufer des Controllers Hand ab. Die Aufrufer rufen dann die richtige Methode am AcceptVerbs Attribute suchen.

die HttpMethodConstraint in Routing verwenden wird es so machen, dass die Route selbst die Anforderung nicht überein. Also, wenn eine Anforderung POST kommt für /home/create, wird weder Aktion-Methode aufgerufen werden, da die Route die Anforderung nicht übereinstimmen. Es ist möglich, dass ein anderer Weg wird obwohl diese Anforderung entspricht.

Ein Teil des Grundes für die Überlappung ist hier, dass Routing ein Feature von ASP.NET 3.5 SP1 und ist zu MVC nicht spezifisch. MVC verwendet Routing, aber Routing auch durch Dynamic Data verwendet wird, und wir planen, das Routing mit ASP.NET Web Forms zu integrieren.

Andere Tipps

Nein -. Erstellen Sie werden nur auf POST-Anfragen antworten

können Sie haben andere Implementierungen mit verschiedenen AcceptVerb Attributen oder einem ohne Attribut Erstellen von, der alle anderen Anfragen werden fangen.

Wenn das ist die einzige Methode Create, jeder GET (oder andere Nicht-POST) Anforderung in einem 404 führen würde.

ich unter der Haube nehme an, dies ist alles sowieso durch das Routing-Engine durchgeführt wird. [Edit: nein, siehe Haacked der Beitrag]

Zuerst dekorieren wie folgt aus:

[ActionName("ItemEdit"), AcceptVerbs(HttpVerbs.Post)]
public virtual object ItemSave(Menu sampleInput)

, dann müssen Sie Route wie folgt hinzuzufügen:

 AddRoute(
                "SampleEdit",
                "Admin/{sampleID}/Edit",
                new { controller = "Sample", action = "ItemEdit", validateAntiForgeryToken = true },
                new { areaID = new IsGuid() },
                new { Namespaces = controllerNamespaces }
           );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top