C# 如何在asp.net core 3.1中为每种类型的请求启用Cors

C# 如何在asp.net core 3.1中为每种类型的请求启用Cors,c#,asp.net-core,cors,asp.net-core-3.0,asp.net-core-3.1,C#,Asp.net Core,Cors,Asp.net Core 3.0,Asp.net Core 3.1,如何在asp.net core 3.1中为每种类型的请求启用Cors 我正在跟踪调查,但他们似乎不起作用 注意:我能够实现特定领域的cors,但不是每个领域。例如,我已将以下配置应用于我的项目: 在ConfigureServices()中我添加的方法: services.AddCors() 在我添加的Configure()方法中: app.UseCors(builder=> { 建设者 .WithOrigins() .AllowAnyMethod() .AllowAnyHeader() .All

如何在asp.net core 3.1中为每种类型的请求启用Cors

我正在跟踪调查,但他们似乎不起作用

注意:我能够实现特定领域的cors,但不是每个领域。例如,我已将以下配置应用于我的项目:

  • ConfigureServices()中我添加的方法:

    services.AddCors()

  • 在我添加的
    Configure()
    方法中:

    app.UseCors(builder=> { 建设者 .WithOrigins() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); });

  • 但是当我尝试从另一个url使用jQuery访问API时,我得到:

    CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头

    现在,如果我将URL放在WithOriginates()方法中,我就可以访问API:

    app.UseCors(builder =>
    {
        builder
        .WithOrigins("https://localhost:44361")
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials();
    });
    
    我的问题是如何不受限制地访问每个URL(即域、子域等)的API。应用*不起作用


    请帮忙

    您需要允许对以下各项执行任何原点操作:

    builder.AllowAnyOrigin()

    具有AllowCredentials的任何来源

    不允许从任何来源发送凭据是出于设计

    您可以使用以下方法来解决此问题

    builder.SetIsOriginAllowed(=>true)

    我不认为这是一个很好的解决方案,因为它消除了useCredentials()的好处

    注意

    在标头中发送JWT不需要使用凭据。如果您需要在请求中发送Cookie,则此选项适用。允许任何来源并启用
    useCredentials
    会导致安全漏洞,这就是默认情况下不允许的原因

    有关更多信息,请阅读


    这应该对你有好处。忽略MVC部件,我只是为您添加了一个,以确保您的管道顺序是正确的

    public void ConfigureServices(IServiceCollection services)
    {
          services.AddCors();
          services.AddMvc();
    }
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseCors(
            options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
        );
    
        app.UseMvc();
    }
    

    我尝试了此操作,但出现错误:“CORS协议不允许同时指定通配符(任何)来源和凭据。如果需要支持凭据,请通过列出各个来源来配置CORS策略。”“这是CORS设计的一部分。发送凭据时,您需要指定允许从发送凭据的来源谢谢。我还必须删除.AllowCredentials();在添加builder.AllowAnyOrigin()之后,如您所说。在删除.AllowCredentials()之后,它才能工作;我仍然能够在头中发送JWT令牌,因此我认为在这种情况下不会阻止凭据发送;就我们所知,这是饼干。我更新了我的问题,提供了更多信息和两个有用问题的链接