2

我已经使用 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) 中托管的服务有关?我已经尝试了所有我能想到的东西,但我仍然很难理解为什么我不能为这个特定的动词定义行为。

4

1 回答 1

3

原来这是 Nancy v0.17.1 中的一个错误(参见https://github.com/NancyFx/Nancy/pull/1093)。升级到 0.18.0 解决了这个问题,并允许我的 OPTIONS 路由正常工作。

于 2013-07-29T09:38:20.650 回答