martes, 21 de enero de 2014

(...) entonces, ¿esto quiere decir que podemos utilizar un middleware para dar soporte CORS a soluciones basadas en la primera versión de WebAPI o en MVC 4?Respuesta corta: sí. Siempre que se cumplan los requisitos de plataforma exigidos por Katana y los middlewares que queramos usar, nada impide hacerlo sobre aplicaciones con versiones anteriores de estos frameworks.
Y vamos con la respuesta larga…
En el último artículo de la serie decíamos que el paquete Nuget
Microsoft.Owin.Host.SystemWeb
permite la ejecución de componentes OWIN/Katana sobre el pipeline de ASP.NET/IIS, lo cual posibilita el uso de middlewares en sistemas y aplicaciones que inicialmente no estaban diseñados para ello.Esto abre la puerta a posibilidades muy interesantes para aprovechar la potencia de algunos de estos módulos OWIN en aplicaciones basadas en versiones anteriores del framework ASP.NET, siempre y cuando se cumplan los requisitos mínimos para ejecutar Katana y los middlewares que nos interesen.
El caso concreto sobre el que giraba la consulta de Carlos lo encontrábamos muy frecuentemente en aplicaciones MVC o WebAPI: la necesidad de dar soporte a peticiones cross-domain usando CORS (Cross-Origin Resource Sharing). Muy resumidamente, se trata de una técnica que permite a los navegadores web realizar peticiones AJAX hacia un dominio distinto del que procede el script que la realiza; para más información aquí tenéis un gran post de José Manuel Alarcón sobre el tema.
Katana ofrece un middleware para gestionar en el lado servidor este tipo de peticiones cruzadas, que está disponible a través de Nuget en el paquete
Microsoft.Owin.Cors
, aunque éste sólo está disponible para ASP.NET 4.5 o superior.Si cumplimos estos requisitos, la forma de ponerlo en funcionamiento es muy sencilla. Primero, añadimos al proyecto el host OWIN para ASP.NET/IIS:
PM> Install-Package Microsoft.Owin.Host.SystemWebY a continuación, añadimos igualmente el middleware CORS proporcionado por Katana:
PM> Install-Package Microsoft.Owin.CorsPor último, debemos crear la clase de configuración, en la que introduciremos el middleware CORS en el pipeline OWIN:
public class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); } }¡Y esto es todo! De esta forma tan sencilla podemos ofrecer soporte para CORS en nuestras aplicaciones MVC o WebAPI, aunque no estemos hablando de las versiones más recientes de ambos frameworks.
Pero antes de acabar, un último apunte: el middleware anterior lo hemos introducido en el pipeline de forma que nuestros servicios podrán ser usados desde cualquier host, lo cual en muchas ocasiones no es correcto por ser demasiado permisivo. Si quisiéramos limitar las llamadas a un host de origen específico podríamos utilizar un código como el siguiente, que utiliza un objeto
CorsPolicy
para indicar los permisos de acceso:public void Configuration(IAppBuilder app) { var options = new CorsOptions() { PolicyProvider = new CorsPolicyProvider() { PolicyResolver = (IOwinRequest context) => { var policy = new CorsPolicy() { AllowAnyHeader = true, AllowAnyMethod = true, AllowAnyOrigin = false, SupportsCredentials = true }; policy.Origins.Add("http://www.myserver.com"); return Task.FromResult<CorsPolicy>(policy); } } }; app.UseCors(options); }Espero que os sea de utilidad.
Publicado en Variable not found.
Aún no hay comentarios, ¡sé el primero!
Enviar un nuevo comentario