Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用deafult和自己的策略在ASP.net核心WebAPI中启用CORS_C#_Asp.net Core - Fatal编程技术网

C# 如何使用deafult和自己的策略在ASP.net核心WebAPI中启用CORS

C# 如何使用deafult和自己的策略在ASP.net核心WebAPI中启用CORS,c#,asp.net-core,C#,Asp.net Core,我希望通过EnableCors属性为一个控制器启用我自己的“MyPolicy”,对于其他控制器,我希望使用默认策略。因此,在我的配置服务方法中,我编写 services.AddCors(options => { options.AddPolicy(name: "MyPolicy", builder => builder .WithOrigins("http://localhost:3000")

我希望通过EnableCors属性为一个控制器启用我自己的“MyPolicy”,对于其他控制器,我希望使用默认策略。因此,在我的配置服务方法中,我编写

services.AddCors(options =>
{
    options.AddPolicy(name: "MyPolicy",
        builder => builder
            .WithOrigins("http://localhost:3000")
            .AllowCredentials()
            .AllowAnyMethod()
            .AllowAnyHeader());

    options.AddDefaultPolicy(
            builder => builder
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader());
});
在Configure方法中,我只调用:

app.UseCors();
它不像我预期的那样工作。这只是定义DefaultPolicy,使用“MyPolicy”的唯一方法是将其用作:

app.UseCors("MyPolicy");
但在这种情况下,默认策略不起作用。
是否可以通过AddPolicy定义自己的策略,通过AddDefaultPolicy定义默认策略。

如果要使用许多自己的策略和默认策略,解决方案是在configureservices中定义:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(
            builder =>
            {
               
                builder.WithOrigins("http://example.com",
                                    "http://www.contoso.com");
            });

        options.AddPolicy("AnotherPolicy",
            builder =>
            {
                builder.WithOrigins("http://www.contoso.com")
                                    .AllowAnyHeader()
                                    .AllowAnyMethod();
            });

    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
并通过以下EnableCorsaAttribute使用策略:

  // GET api/values
    [EnableCors("AnotherPolicy")]
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { "green widget", "red widget" };
    }

哪个版本的ASP.NET Core?您研究过ASP.NET Core 2.2吗?基于属性的方法结合默认的CORS策略可能适合您。如果您尝试使用CORS属性对路由进行注释,请提供控制器代码。我以前读过这篇文章,但现在我尝试不在配置方法中使用CORSE,就像在ms doc侦听中一样。我在控制器中只使用属性方法,它的工作正如我所期望的那样。我想在配置方法和属性方法中结合UseCorse,但它不起作用。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }
    //Do not use this method:
    //app.UseCors();

    app.UseHttpsRedirection();
    app.UseMvc();
}