que origin missing headers enable control allow azure cors nancy

azure - origin - ¿Es posible habilitar CORS usando NancyFX?



enable cors web api (3)

Es posible hacer esto en el bootstraper de Nancy

protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context) { //CORS Enable pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) => { ctx.Response.WithHeader("Access-Control-Allow-Origin", "*") .WithHeader("Access-Control-Allow-Methods", "POST,GET") .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type"); });

Tengo un servicio de API creado con NancyFX y un par de desarrolladores de aplicaciones para el usuario que crean un cliente SPA JS contra esta API.

Nos gustaría probar el código del lado del cliente contra el servidor publicado sin tener que publicar el código del cliente con demasiada frecuencia.

Pero, el cliente se ejecuta en localhost, y el servidor está en Windows Azure.

¿Es posible y fácil habilitar CORS en el servidor NancyFX? ¿Cómo puedo hacer eso?

Gracias.


Si está utilizando IIS para alojar a Nancy, en este caso en Windows Azure, puede actualizar el web.config para agregar el encabezado a cada solicitud.

Esto se puede hacer agregando lo siguiente:

<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer>

Alternativamente, puede hacer lo que Sunny sugirió, y si no le gusta escribir eso cada vez que puede agregar su propio método de extensión:

public static class NancyExtensions { public static void EnableCors(this NancyModule module) { module.After.AddItemToEndOfPipeline(x => { x.Response.WithHeader("Access-Control-Allow-Origin", "*"); }); } }

Entonces puedes simplemente llamar a esto. this.EnableCors() en tu ruta.


Si su solicitud HTTP es simple , la respuesta de Phill será suficiente, pero si la solicitud no es tan simple, el navegador enviará una verificación previa. La comprobación de verificación previa es una solicitud HTTP de OPCIONES y esto también debe manejarse.

Aquí hay un método de extensión para configurar CORS:

public static class MyNancyExtension { public static void EnableCORS(this Nancy.Bootstrapper.IPipelines pipelines) { pipelines.AfterRequest.AddItemToEndOfPipeline(ctx => { if (ctx.Request.Headers.Keys.Contains("Origin")) { var origins = "" + string.Join(" ", ctx.Request.Headers["Origin"]); ctx.Response.Headers["Access-Control-Allow-Origin"] = origins; if (ctx.Request.Method == "OPTIONS") { // handle CORS preflight request ctx.Response.Headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"; if (ctx.Request.Headers.Keys.Contains("Access-Control-Request-Headers")) { var allowedHeaders = "" + string.Join( ", ", ctx.Request.Headers["Access-Control-Request-Headers"]); ctx.Response.Headers["Access-Control-Allow-Headers"] = allowedHeaders; } } } }); } }

Para habilitar CORS llama a este método de extensión en el programa de arranque:

protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines) { base.ApplicationStartup(container, pipelines); pipelines.EnableCORS(); }

Tenga en cuenta que no extiende NancyModule porque OPCIONES se maneja fuera del módulo (también here ).