2012-10-04 26 views
6

sólo quería saber cuál es la mejor manera elegante (actualmente disponible) para manejar CORS (Cross-Origin Resource Sharing) en ASP.NET WebAPI así que puede utilizar XmlHttpRequest a través de múltiples dominios? ¿Cómo puedo integrar esto en los encabezados de cada tipo de solicitud (GEt, POST, etc.) con OPTIONS también?CORS con WebAPI para XmlHttpRequest

Gracias!

+0

¿Qué significa CORS? –

+1

Intercambio de recursos entre orígenes – Rushino

Respuesta

6

Tpeczek tiene un buen hallazgo, sin embargo, mientras hacía mi propia investigación, encontré formas similares y también muy elegantes de manejar CORS que le permiten configurar sus CORS en un archivo de configuración en la carpeta App_Start. Todo se maneja con una biblioteca de código abierto llamada Thinkecture. Ver detalles aquí:

http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/

Se tienen muchas ventajas .. puede configurar orígenes, métodos (GET, POST, etc.), el acceso a los controladores y acciones específicos y también mantener los controladores limpia de cualquier atributo .

¡Compatible con WebAPI, IIS y ASP.NET MVC!

0

Depende de qué tan fino desee controlar CORS. Si desea permitir cualquier dominio, por ejemplo, puede agregar encabezados CORS estáticos a todas las respuestas configurándolos en IIS. Elegí este enfoque y wrote about it here.

3

Carlos Figueira tiene una bonita serie de mensajes sobre CORS y ASP.NET Web API:

Personalmente soy un gran fan de Tome el enfoque 2 porque el atributo EnableCors se puede extender fácilmente para darle control sobre los orígenes permitidos.

+0

Interesante ... sin embargo creo que encontré algo mejor que satisface mis necesidades y más miro mi respuesta. – Rushino

2

ahora hay soporte CORS en el nocturno de Web API

http://blogs.msdn.com/b/yaohuang1/archive/2013/04/05/try-out-asp.net-web-api-cors-support-using-the-nightly-builds.aspx

Uso nuget a:

  • Desinstalar paquete de los Microsoft.AspNet.Mvc.FixedDisplayModes.
  • Instalar paquete Microsoft.AspNet.WebApi.Cors de la noche se acumula

luego fijar las fijaciones en el web.config Después habilite CORS

config.EnableCors(new EnableCorsAttribute()) 

Lea más sobre esto en el wiki https://aspnetwebstack.codeplex.com/wikipage?title=CORS%20support%20for%20ASP.NET%20Web%20API&referringTitle=Specs

Editar 19-04-2013 Scott Guthrie ha blogueado al respecto: http://weblogs.asp.net/scottgu/archive/2013/04/19/asp-net-web-api-cors-support-and-attribute-based-routing-improvements.aspx

+1

Se ha agregado un nuevo tutorial a la documentación de la API web. Han integrado los cambios nigtly cors en el repositorio nuget principal. http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api – Jesse

3

Agregue a continuación en el archivo web.cofig (dentro del elemento system.webserver).

<httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Headers" value="accept, maxdataserviceversion, origin, x-requested-with, dataserviceversion" /> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Max-Age" value="1728000" /> 
     </customHeaders> 
    </httpProtocol> 

y añadir a continuación el código en el archivo global.aspx.cs

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") 
     { 
      Response.StatusCode = 200; 
      Response.End(); 
     } 
    } 
+0

solución anterior que funciona para mí. pero la solicitud de "OPCIONES" se envía al servidor por primera vez. – User0106