【问题标题】:How do you enable cross-origin requests (CORS) in ASP.NET Core MVC如何在 ASP.NET Core MVC 中启用跨域请求 (CORS)
【发布时间】:2015-05-19 23:12:32
【问题描述】:

我想在使用 ASP.NET Core MVC 构建的 API 上启用 CORS,但所有当前文档都引用了该框架的早期版本。

【问题讨论】:

标签: c# asp.net-core cors asp.net-core-mvc


【解决方案1】:

目前正在开发对 CORS 的支持。以下问题正在跟踪: https://github.com/aspnet/Mvc/issues/498

更新(2015 年 3 月 28 日)
此功能已签入,应该会在下一个版本中提供。

【讨论】:

    【解决方案2】:

    关于 Cors 新功能的注释非常简单,但通过查看新的类和方法,我能够让它在我的解决方案中运行。我的 Web API startup.cs 看起来像这样。您可以通过使用新的CorsPolicy 类来了解如何构建您的起源和策略。并使用 AddCorsUseCors 方法启用 CORS。

     public void ConfigureServices(IServiceCollection services)
     {
         services.AddMvc();
         //Add Cors support to the service
         services.AddCors();
    
         var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy();
    
         policy.Headers.Add("*");    
         policy.Methods.Add("*");          
         policy.Origins.Add("*");
         policy.SupportsCredentials = true;
    
         services.ConfigureCors(x=>x.AddPolicy("mypolicy", policy));
    
     }
    
    
     public void Configure(IApplicationBuilder app, IHostingEnvironment  env)
     {
         // Configure the HTTP request pipeline.
    
         app.UseStaticFiles();
         //Use the new policy globally
         app.UseCors("mypolicy");
         // Add MVC to the request pipeline.
         app.UseMvc();
     }
    

    您还可以像这样使用新属性引用控制器中的策略

    [EnableCors("mypolicy")]
    [Route("api/[controller]")]  
    

    【讨论】:

    • 请注意,我必须将 Microsoft.AspNet.Cors 添加到我的 project.json 中才能正常工作,更具体地说,app.UseCors("mypolicy"); 行报告了一个错误,直到添加了该包。就我而言,我使用了 1.0.0-beta6 版本(而不是最终的 5.2.3 版本也可用。)。此外,如果 using Microsoft.AspNet.Builder; 不存在,请将其添加到 Startup.cs 也很重要。
    • 只是给人们的注释......直到我意识到我必须将 UseCors 放在 UseMvc 行之前,它才对我有用。
    【解决方案3】:

    我使用以下代码让它工作:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()));
    }
    

    如果需要,您可以将AllowAnyHeader() 和/或AllowAnyMethod() 链接到配置操作。

    为整个应用配置它:

    public void Configure(IApplicationBuilder app)
    {
        app.UseCors("AllowAll");
    }
    

    或者只是一个控制器:

    [EnableCors("AllowAll")]
    public class HomeController : Controller
    {
       // ...
    }
    

    --

    更新:所有请求配置 CORS 可以更简单一些:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddCors();
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseCors(builder =>
        {
            builder.WithOrigins("http://some.origin.com")
                   .WithMethods("GET", "POST")
                   .AllowAnyHeader();
        });
    }
    

    有关详细信息,请参阅docs

    【讨论】:

      【解决方案4】:

      cs1929 方法 services.ConfigureCors(...) 不再存在。它与 AddCors 合并:

      services.AddCors(options => 
          options.AddPolicy("AllowAllOrigins", builder => builder.AllowAnyOrigin()));
      

      【讨论】:

        【解决方案5】:

        在 ASP.NET Core 的最新RC2 中。

        NuGet 包是

        "Microsoft.AspNetCore.Owin": "1.0.0-rc2-final",
        "Microsoft.AspNetCore.Cors": "1.0.0-rc2-final",
        

        在 Startup.cs 中

        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddCors();
            services.AddMvc();
        }
        
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
        
            app.UseCors(builder =>  builder
            .AllowAnyOrigin());
            app.UseMvc();
        }
        

        【讨论】:

        【解决方案6】:

        安装:Microsoft.AspNetCore.Cors

        在配置方法中:

                app.UseCors(builder =>
                        builder.WithOrigins("http://some.origin.com"));
        

        【讨论】:

          猜你喜欢
          • 2016-08-23
          • 2015-10-29
          • 2021-01-28
          • 2017-03-26
          • 2016-05-01
          • 2017-02-26
          • 1970-01-01
          • 2016-11-23
          • 2023-03-27
          相关资源
          最近更新 更多