javascript - Nancy + .NET Core 启用 CORS 不起作用

标签 javascript c# asp.net-core cors nancy

我在客户端有以下请求:

$.get(getUrl)

我在后端尝试了以下操作:

Is it possible to enable CORS using NancyFX?

我还尝试了这四种方法(分别,因此被注释掉):

        // protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
    // {
    //     pipelines.AfterRequest += ctx =>
    //     {
    //         ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    //         ctx.Response.Headers.Add("Access-Control-Allow-Headers", "*");
    //         ctx.Response.Headers.Add("Access-Control-Allow-Methods", "*");
    //     };
    // }

    protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
    {
        pipelines.AfterRequest += (ctx) =>
        {
            ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");
        };
    }

    protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
    {
        base.RequestStartup(container, pipelines, context);

        // pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) =>
        // {
        //     ctx.Response.WithHeader("Access-Control-Allow-Origin", "*")
        //         .WithHeader("Access-Control-Allow-Methods", "*")
        //         .WithHeader("Access-Control-Allow-Headers", "*");        
        // });

        // pipelines.AfterRequest += (ctx) =>
        // {
        //     ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");
        //     ctx.Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        // };

我什至尝试过我的模块,例如:

After += (Context) =>
{
    Context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    Context.Response.Headers.Add("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
    Context.Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, x-requested-with, Authorization, Accept, Origin");
};

所有结果都相同:

XMLHttpRequest cannot load http://localhost:5000/registration/signup. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5001' is therefore not allowed access. The response had HTTP status code 401.

401 是因为我没有传入预期的自定义 header 。我只是想先解决 CORS 问题

最佳答案

欢迎。这是一条双头蛇。我尝试了一个基本的 Nodejs 反向代理,当它不起作用时......这一切都是有道理的。

我与 Nancy 采取的一些方法似乎不起作用,因为我有身份验证中间件代码,该代码在 Bootstrap 代码之前命中/运行。因此,预检请求总是会立即收到 401(它们不会发送中间件正在检查的自定义 header ),并且启用 CORS 的代码永远不会受到攻击。

然而,另一个问题是这是本地主机。浏览器显然不允许 localhost 进行 CORS。所以这里的解决方案是使用 ngrok (没有对此进行测试,但没有理由它不应该工作)。或者运行 chrome,并将禁用的 Web 安全标志设置为 false(此方法因操作系统而异)。

我尝试了后一个选项,为了解决我的 Nancy CORS 代码未运行的问题,我将其全部删除并采用此处概述的标准 .NET Core CORS 方法:https://learn.microsoft.com/en-us/aspnet/core/security/cors

现在我的 Access-Control-Allow-Origin header 正在设置,并且 chrome 的运行有些不安全。但它有效。

我认为在生产中我将使用像 NGINX 这样的反向代理。而这一切都将成为遥远的内存......

关于javascript - Nancy + .NET Core 启用 CORS 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41518026/

相关文章:

asp.net-core - 按范围发送电子邮件与按范围发送电子邮件ASP.NET Core 中的 transient

linux - 如何使用 .Net Core 编写 linux 守护进程

javascript - jQuery 追加(或appendTo)动画

javascript - 为什么 boolean 原语不调用原型(prototype) toString()?

c# - 如何在不知道要存储多少值的情况下创建数组?

c# - 带有重音符号的 MailMessage 附件文件名

azure - 站点地图文件未​​部署到 Azure 网站

javascript - React - 使用内联重要样式

php - 使用此 Facebook 风格 Lightbox - 请求 AJAX - 在页面上覆盖多个按钮

c# - 如何在 C# 中将数组的一部分复制到另一个数组?