[REST WCF] Haciendo nuestros servicios RESTful – 201 (Created)
Cuando un servicio se diseña basandose en los principios de REST se denominan RESTful y uno de estos principios es que cuando se crea un recurso el servicio debe responder con un código 201 (Created) además de retornar la Url del recurso creado.
Si creamos un servicio REST con WCF y creamos un recurso, esta es la respuesta por defecto que nos dá el servicio:
Como podéis observar, el servicio nos retorna un código 200 (OK) y no es que este mal, pero siguiendo el estilo o los principios de REST debe comportase como se citó anteriormente.
Para modificar las cabeceras HTTP, disponemos una clase WebOperationContext, que es una wrapper con el que vamos a poder modificar las cabeceras HTTP:
.gif)
Current
Obtiene el contexto de operación web actual.
Usar en Cliente:
IncomingResponse
Obtiene el contexto de respuesta web para la solicitud que se está recibiendo.
OutgoingRequest
Obtiene el contexto de solicitud web para la solicitud que se está enviando.
Usar en Servidor:
IncomingRequest
Obtiene el contexto de solicitud web para la solicitud que se está recibiendo
OutgoingResponse
Obtiene el contexto de respuesta web para la respuesta que se está enviando.
En nuestro caso vamos a utilizar Current, para acceder al contexto y OutgoingResponse, para obtener el contexto de respuesta y modificar la cabecera HTTP:
/// <summary>
/// Adds the product.
/// </summary>
/// <param name="product">The product.</param>
/// <returns></returns>
public Product AddProduct(Product product)
{
product.Id = Guid.NewGuid().ToString();
product.LastModified = DateTime.Now;
_products.Add(product);
UriTemplate ut = new UriTemplate("/products/{id}");
Uri baseUri = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri;
Uri ret = ut.BindByPosition(baseUri, product.Id);
OutgoingWebResponseContext owrc = WebOperationContext.Current.OutgoingResponse;
owrc.SetStatusAsCreated(ret);
return product;
}
Con este código conseguimos nuestro proposito, retornar el 201 (Created) y la Url del recurso creado:
Esto es todo!!!