Nancy + .NET Core使CORS无法正常工作

时间:2017-01-07 05:07:34

标签: 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是因为我没有传入预期的自定义标头。我只是想先解决CORS问题

1 个答案:

答案 0 :(得分:0)

韦尔普。这是一条双头蛇。我曾尝试过尝试一个基本的nodejs反向代理,当它没有工作时......这一切都是有道理的。

我似乎没有采用Nancy的一些方法,因为我有auth中间件代码,它在引导程序代码之前被命中/运行。因此,预检请求将立即获得401(他们不会发送中间件正在检查的自定义标头),并且启用CORS的代码永远不会被命中。

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

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

现在正在设置我的Access-Control-Allow-Origin标头,并且Chrome运行时有点不安全。但它的确有效。

我认为对于制作我将使用像NGINX这样的反向代理。所有这些看起来都像是一段遥远的记忆......