EnableCorsAttribute

时间:2018-06-27 17:21:00

标签: c# asp.net-web-api asp.net-core

我想从控制器中启用CORS到asp.net core 2应用程序中,因此我在控制器中添加了以下属性:

[EnableCors(origins: "*", headers: "accept,content-type,origin,x-my-header", methods: "*")]

但是我在起源上却出错了

  

“ EnableCorsAttribute”的最佳重载没有参数   名为“起源”

所以我从元数据访问EnableCorsAttribute,发现了以下方法:

namespace Microsoft.AspNetCore.Cors
{

    public class EnableCorsAttribute : Attribute, IEnableCorsAttribute
    {
        public EnableCorsAttribute(string policyName);

        public string PolicyName { get; set; }
    }
}

但是应该是这样的方法:

public EnableCorsAttribute(string origins, string headers, string methods);

为什么我没有它?我需要安装东西吗?我是Asp.Net Core的新手,我不明白为什么该方法不在我的api中。问候

1 个答案:

答案 0 :(得分:2)

EnableCorsAttribute(string origins, string headers, string methods)包中没有像Microsoft.AspNetCore.Cors这样的属性。

在您的情况下并基于Enable Cross-Origin Requests (CORS) in ASP.NET Core
如果提供的cors配置是针对整个应用的,则在您的ConfigureServices方法中添加cors服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
}

然后使用Configure方法的全局cors中间件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(builder => builder
        .WithOrigins("https://my.web.com", "http://localhost:5001")
        .AllowAnyMethod()
        .AllowCredentials()
        .WithHeaders("Accept", "Content-Type", "Origin", "X-My-Header"));

    //code omitted
}

用您的原籍替换("https://my.web.com", "http://localhost:5001")
如果您想在ConfigureServices方法中使用多个cors配置,

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("MyCorsPolicy", builder => builder
            .WithOrigins("https://my.web.com", "http://localhost:5001")
            .AllowAnyMethod()
            .AllowCredentials()
            .WithHeaders("Accept", "Content-Type", "Origin", "X-My-Header"));
    });
}

Configure方法中:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors("MyCorsPolicy");

    //code omitted
}

最后进入控制器:

[EnableCors("MyCorsPolicy")]
public class MyController : Controller
{ ... }