覆盖 NancyFX / Visual Studio Web 服务器中的 OPTIONS 响应
Posted
技术标签:
【中文标题】覆盖 NancyFX / Visual Studio Web 服务器中的 OPTIONS 响应【英文标题】:Override OPTIONS response in NancyFX / Visual Studio Web Server 【发布时间】:2013-07-18 21:21:07 【问题描述】:我已经使用 NancyFX 构建了一个 RESTful Web 服务,我现在正尝试从一个单独的域发布到该服务。当然,当我这样做时,我会在控制台中看到一条失败的 OPTIONS 消息,因为这是一个跨站点 POST,我需要确保 Nancy 正确响应浏览器发送的 OPTIONS 消息。但是,当我在 Nancy 模块中定义路由时:
this.Options["/options/"] = _ => this.OptionsRequest();
private dynamic OptionsRequest()
return this.Response.AsJson(Request)
.WithHeader("Access-Control-Allow-Origin", "*")
.WithHeader("Access-Control-Allow-Methods", "POST")
.WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type");
代码永远不会被命中。我可以在调试器中的 OptionsRequest() 方法上设置断点,然后查看代码永远不会被命中。但是我可以在邮递员中发出一个 OPTIONS 请求,然后服务器返回一个响应(有趣的是,它似乎返回了来自所有 URI 的响应,而不仅仅是我定义的 /options/ 路由)。
我是否必须覆盖默认的 Nancy OPTIONS 行为才能为 OPTIONS 指定路由,或者这与 Visual Studio Development Web Server (Casini) 中托管的服务有关?我已经尝试了所有我能想到的方法,但我仍然很难理解为什么我不能为这个特定的动词定义行为。
【问题讨论】:
【参考方案1】:原来这是 Nancy v0.17.1 中的一个错误(请参阅 https://github.com/NancyFx/Nancy/pull/1093)。升级到 0.18.0 解决了这个问题并让我的 OPTIONS 路由正常工作。
【讨论】:
以上是关于覆盖 NancyFX / Visual Studio Web 服务器中的 OPTIONS 响应的主要内容,如果未能解决你的问题,请参考以下文章
NancyFx+SignalR 自托管和 Windows 服务