让CORS与Nancy合作

我试图让所有类型的请求与Nancy和CORS一起工作。 目前我在请求结束时添加了一个管道:

pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) => ctx.Response .WithHeader("Access-Control-Allow-Origin", "http://localhost:57515") .WithHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, OPTIONS") .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type") .WithHeader("Allow", "POST, GET, DELETE, PUT, OPTIONS")) 

选项请求返回状态代码为200,这使我相信它执行正常,但对于OPTIONS以外的任何类型的请求,它都会因405 Method Not Allowed而失败。 还有什么我需要做客户端或服务器端才能使其工作?

我使用的客户端库是骨干。

提前致谢。

我认为您不需要将OPTIONS指定为允许的CORS方法。 我从来没有见过那套,而且我自己从未设定过。 浏览器不抱怨。

另外我在我的设置中也有类似的设置:

 public abstract class MyModule : NancyModule protected MyModule(bool hasRazorView = true) After.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")); . . . . } } 

在我的情况下,CORS在我的GET和POST上发送,但不是OPTIONS。 我用Options["/"] = route => new Response()覆盖了默认的OPTIONS处理。 这让管道的其余部分开火了。

我发现在IIS重写器规则中处理CORS头文件更好,这是示例重写webconfig部分,它执行此操作:

                           

请记住安装IIS重写模块: http : //www.iis.net/downloads/microsoft/url-rewrite

在.NET Core上,我能够使用Configure方法中的以下代码传递CORS:

  // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public virtual void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); // Shows UseCors with CorsPolicyBuilder. app.UseCors(builder => builder.WithOrigins(new[] { "http://localhost:4200" }).AllowAnyHeader() .AllowAnyMethod() .AllowCredentials() ); app.UseOwin(a => a.UseNancy(b => b.Bootstrapper = new NancyBootstrap(this.Container))); }