net mvc example editar asp asp.net-mvc routes httpverbs acceptverbs

example - ASP.NET MVC AcceptVerbs y registro de rutas



editar en mvc asp net (3)

No, Create solo responderá a las solicitudes POST.

Puede tener otras implementaciones de Create con diferentes atributos de AcceptVerb, o uno sin atributo que capture todas las demás solicitudes.

Si ese fuera su único método Create, cualquier solicitud GET (u otra solicitud que no sea POST) daría lugar a un 404.

Supongo que bajo el capó todo está siendo hecho por el motor de enrutamiento de todos modos. [editar: no, mira la publicación de Haacked]

¿Debo registrar la restricción de HttpVerb en la definición de mi ruta (cuando estoy registrando rutas) si ya decoré mi método de acción con el atributo [AcceptVerbs (..)]?

p.ej. tengo esto.

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

¿Necesito agregar esto a la ruta que se refiere a esta acción, como una restricción?


Primero decorar así:

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

entonces necesitas agregar una ruta como esta:

AddRoute( "SampleEdit", "Admin/{sampleID}/Edit", new { controller = "Sample", action = "ItemEdit", validateAntiForgeryToken = true }, new { areaID = new IsGuid() }, new { Namespaces = controllerNamespaces } );


La diferencia entre los dos es la siguiente: supongamos que el método Create en cuestión está en el HomeController .

El uso del atributo AcceptVerbs no afecta el enrutamiento. En realidad, es algo utilizado por el invocador de acción. Lo que le permite hacer es tener 2 métodos de acción en un controlador con el mismo nombre que responden a un método HTTP diferente.

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

Entonces, cuando aparece una solicitud para /home/create , la ruta coincidirá y entregará la solicitud al invocador del controlador. El invocador invoca el método correcto mirando el atributo AcceptVerbs .

El uso de HttpMethodConstraint en el enrutamiento hará que la ruta en sí no coincida con la solicitud. Entonces, cuando entra una solicitud POST para /home/create , no se llamará a ningún método de acción porque esa ruta no coincidirá con la solicitud. Sin embargo, es posible que otra ruta coincida con esa solicitud.

Parte del motivo de la superposición es que el enrutamiento es una característica de ASP.NET 3.5 SP1 y no es específico de MVC. MVC utiliza enrutamiento, pero el enrutamiento también lo utilizan Dynamic Data y planeamos integrar el enrutamiento con ASP.NET Web Forms.