[ASP.NET Web API] Métodos no HTTP en Api Controller

Como sabemos el framework reconocerá los métodos GetXXX, PostXXX etc. de nuestro Api Controller como métodos HTTP, pero puede surgir la necesidad de manejar métodos de acción que no trabajen con los métodos http, algo así como un RPC o mejor aún como los métodos de acción que hemos trabajado con MVC. Pues bien, la solución al interrogante de si es posible, es SI, y el ¿Cómo? Pues sencillo, simplemente agregamos una nueva ruta a la tabla de rutas muy similar a las que trabajamos con MVC:

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Routes.MapHttpRoute(
                name: "RpcApi",
                routeTemplate: "api/{controller}/{action}/{Id}",
                defaults: new { id = RouteParameter.Optional }
            );

Y del lado de nuestro API Controller un método que no sea entendido como un método Http, tal como:

        public string NoHttpMethod(string id)
        {
            return "Otro valor " + id.ToString(CultureInfo.InvariantCulture);
        }

Al ejecutar y hacer una solicitud a nuestra api obtendremos un http 405:



Esto es porque por defecto si no especificamos los verbos permitidos, el framework lo interpreta como un HTTP Post, por tanto GET no es un método entendido para este recurso. La solución está en decorar nuestro método con [AcceptVerbs (string)]

        [AcceptVerbs("GET")]
        public string NoHttpMethod(string id)
        {
            return "Otro valor " + id.ToString(CultureInfo.InvariantCulture);
        }

NOTA: [AcceptVerbs vs HttpGet]

Con esto agregamos soporte a esos métodos personalizados que podemos llegar a necesitar cuando trabajamos con Web Api.

Espero les sea de utilidad.

Hasta el próximos post.

Anuncios
[ASP.NET Web API] Métodos no HTTP en Api Controller

Un comentario en “[ASP.NET Web API] Métodos no HTTP en Api Controller

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s