Web Api, trabajar con JSON y acciones con nombre personalizado

Vamos hacer que nuestro Web Api siempre retorne un JSON y podamos acceder a cada acción mediante el nombre que especifiquemos.

Rodríguez Patiño, Eduardo
4,758 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado hace poco nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para restaurarla manualmente.

Trabajando con JSON

Por defecto, cuando creo un proyecto Web Api, este retorna siempre la información serializada en XML. Lo que yo quiero es que lo haga en JSON, para ello nos vamos a App_Start/WebApiConfig.cs y agregamos la siguiente línea de código al método Register.

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}

Nombre personalizado para nuestras acciones

Por defecto, Web Api maneja un standard para implementar la acciones y acceder a ella, veamos el siguiente código:

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public void Post([FromBody]string value)
    {
    }

    // PUT api/values/5
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/values/5
    [HttpDelete]
    public void Delete(int id)
    {
    }
}

Por ejemplo, si quiero acceder a la acción Get, lo que hago es acceder a esta URl api/values y por defecto la va a reconocer. Si le paso un entero a dicha URL reconocera la acción que tiene de .sobrecarga un entero.

 public string Get(int id) { return "value"; }

En Web Api, este standard representa los verbos que debe interpretar la cabecera de nuestro navegador para acceder a cada uno de ellos. Por lo tanto, al usar Get, estamos diciendo que es accesible mediante el método GET, así para los demás, los métodos o verbos usados son: GET, PUT, DELETE y POST. De esta manera, con estos 5 métodos tenemos resuelto las operacioens más básicas que necesitaramos implementar para nuestro aplicativo, es decir un CRUD.

Ahora si tu quieres acceder a dichas acciones como lo vienes haciendo en ASP.NET MVC, pues modificamos nuevamente nuestro WebApiConfig para que quede de la siguiente manera.

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

Ya esta, ahora soporta acciones personalizadas.

NOTA: ahora cuando crees una acción personalizada, por defecto va a implementar el método POST, así que, si queremos que dicha acción pueda ser accesible por el método GET le decimos mediante una etiqueta que acepete el verbo GET.

[AcceptVerbs("Get")]
public string Listar()
{
    return "Accion personalizada";
}

La URL de acceso vendría ser: api/values/listar

¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín