PATCH y OPTIONS: nuevos verbos HTTP para métodos de acción en ASP.NET MVC 4

21. November 2012 00:01 by Oscar.SS in Desarrollo Web  //  Tags:   //   Comments (0)

En ASP.NET MVC 3 teníamos a nuestra disposición los atributos HttpGetAttribute, HttpPostAttribute, HttpPutAttribute, HttpDeleteAttribute y HttpHeadAttribute. Estos atributos, que nos permiten filtrar que verbos HTTP aceptarán nuestros métodos de acción, son tratados como una enumeración de flags dentro de la clase AcceptVerbsAttribute. Veamos por ejemplo la implementación del atributo para el verbo POST.

        [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
        
public sealed class HttpPostAttribute : ActionMethodSelectorAttribute
        {
            
private static readonly AcceptVerbsAttribute _innerAttribute = new AcceptVerbsAttribute(HttpVerbs.Post);

            public override bool 
IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
            {
                
return _innerAttribute.IsValidForRequest(controllerContext, methodInfo);
            
}
        }

Se crea una instancia de la clase AcceptVerbsAttribute y se le pasa al constructor el valor para este verbo de la enumeración HttpVerbs. El constructor llama a su vez al método AcceptVerbsAttribute.EnumToArray() para construir la lista de verbos HTTP que soportará nuestro método de acción. A continuación podéis ver la implementación de este método y los nuevos verbos añadidos en ASP.NET MVC 4.

        private static void AddEntryToList(HttpVerbs verbs, HttpVerbs match, List<string> verbList, string entryText)
        {
            
if ((verbs & match) !0)
            {
                verbList.Add(entryText)
;
            
}
        }

        
internal static string[] EnumToArray(HttpVerbs verbs)
        {
            List<
string> verbList = new List<string>();

            
// ASP.NET MVC3
            
AddEntryToList(verbs, HttpVerbs.Get, verbList, "GET");
            
AddEntryToList(verbs, HttpVerbs.Post, verbList, "POST");
            
AddEntryToList(verbs, HttpVerbs.Put, verbList, "PUT");
            
AddEntryToList(verbs, HttpVerbs.Delete, verbList, "DELETE");
            
AddEntryToList(verbs, HttpVerbs.Head, verbList, "HEAD");
            
            
// New in ASP.NET MVC4
            
AddEntryToList(verbs, HttpVerbs.Patch, verbList, "PATCH");
            
AddEntryToList(verbs, HttpVerbs.Options, verbList, "OPTIONS");

            return 
verbList.ToArray();
        
}

La manera en la que utilizamos estos nuevos atributos como era de esperar es la misma, tenemos dos enfoque principales, especificando en el constructor del atributo AcceptVerbsAttribute el tipo de verbo por medio de la enumeración HttpVerbs, o directamente por medio de los atributos HttpPatchAttribute y HttpOptionsAttribute. Esta última opción como podemos observar a continuación es más rápida de escribir y fácil de leer.

        [HttpPatch][HttpOptions]
        
public ActionResult Index()
        {
            ViewBag.Message 
"Modify this template to jump-start your ASP.NET MVC application.";

            return 
View();
        
}

        [AcceptVerbs(HttpVerbs.Patch)]
        [AcceptVerbs(HttpVerbs.Options)]
        
public ActionResult Index()
        {
            ViewBag.Message 
"Modify this template to jump-start your ASP.NET MVC application.";

            return 
View();
        
}

El verbo HTTP PATCH se utiliza para modificar un recurso HTTP. Digamos que con el verbo HTTP PUT podíamos crear o reemplazar un recurso ya existente, pero no modificarlo. Este es el propósito del verbo HTTP PATCH. Si el lector quiere saber más le recomiendo este enlace.

En cuanto al verbo HTTP OPTIONS permite al cliente saber que opciones, requerimientos y capacidades del servidor están asociadas a la comunicación entre el cliente y el servidor. Si deseas profundizar un poco más sobre este verbo, puedes hacerlo aquí.

Recent Comments

Comment RSS

Month List