我正在尝试让所有类型的请求与 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。为了让它工作,我还需要在客户端或服务器端做任何其他事情吗?
我使用的客户端库是 backbone。
提前致谢。
最佳答案
我认为您不需要将 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 处理。这让管道的其余部分启动。
关于c# - 让 CORS 与 Nancy 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171749/