使用 NancyFX 获取在 CORS 中不起作用的请求

Posted

技术标签:

【中文标题】使用 NancyFX 获取在 CORS 中不起作用的请求【英文标题】:Get request not working in CORS with NancyFX 【发布时间】:2018-03-07 17:54:20 【问题描述】:

我在使用 CORS 请求和 NancyFx 时遇到了一些问题。 我有一些 GET 请求有效,但不是每次都有效。

由于我使用Content-Type : application/json,我的请求不是“简单类型的请求”,因此它们有一个预检OPTIONS 请求。

预检有效,但有时GET 请求后会返回 404(未找到我要求的路线),有时我会得到我的数据。

这是我在 Nancyfx 中的 CORS 回复:

protected override void RequestStartup(TinyIoCContainer requestContainer, IPipelines pipelines, NancyContext context)

    base.RequestStartup(requestContainer, pipelines, context);

    pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) =>
    
        ctx.Response.WithHeader("Access-Control-Allow-Origin", "*")
        .WithHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, OPTIONS, PATCH")
        .WithHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
        .WithHeader("Access-Control-Max-Age", "3600");
    );

我提出的请求如下所示:

http://localhost:3579/api/v2/vnos/idVno:guid/vnos(并且始终设置 idVno)。

这是我在控制台中得到的:

这是我在“网络”选项卡中看到的内容:

我在客户端中添加的唯一特定标头是 Authorization 标头。

【问题讨论】:

【参考方案1】:

OPTIONS 处理程序应该在应用程序启动时调用,而不是像您那样请求启动,否则如果请求不是2XX,它将被忽略。

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)

    pipelines.AfterRequest += (ctx) =>
    
        ctx.Response.WithHeader("Access-Control-Allow-Origin", "*")
                    .WithHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, OPTIONS, PATCH")
                    .WithHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
                    .WithHeader("Access-Control-Max-Age", "3600");
    

更多信息请参见https://github.com/NancyFx/Nancy/issues/1422。

【讨论】:

只有 sn-p 帮助解决,忘记在4xx 回复中添加它。谢谢思考 这解决了我的问题。我不知道在哪里声明 ApplicationStartup 方法。后来我发现我必须创建一个扩展 DefaultNancyBootstrapper 的类,而 NancyFx 将使用此引用进行程序集并调用它。谢谢! 对我来说它没有解决。每个请求都被这个块捕获,但我仍然有 CORS 策略阻止返回。

以上是关于使用 NancyFX 获取在 CORS 中不起作用的请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 CORS 标头时,$.get 在 IE 中不起作用

使用 CORS 的应用程序在 Azure 中不起作用

使用 Java Config 的全局 CORS 配置在 Spring MVC 中不起作用

为啥预构建 cors 策略配置在 Laravel 7 应用程序中不起作用?

CORS 标头在 MEAN 堆栈应用程序中不起作用

CORS 在 Firefox 中不起作用