Как включить CORS в ASP. net Core WebAPI с глухой и собственной политикой - PullRequest
0 голосов
/ 10 июля 2020

Я хотел бы включить с помощью 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());
});

, а в методе настройки я просто вызываю:

app.UseCors();

, он работает не так, как я ожидал. Это только определение DefaultPolicy, и единственный способ использовать «MyPolicy» - использовать их как:

app.UseCors("MyPolicy");

Но в этом случае политика по умолчанию не работает. Можно ли определять собственные политики с помощью AddPolicy и политику по умолчанию с помощью AddDefaultPolicy.

1 Ответ

0 голосов
/ 16 июля 2020

Если вы хотите использовать множество собственных политик и политик по умолчанию, решение состоит в том, чтобы определить в 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);
}

и использовать политики через EnableCorsAttribute следующим образом:

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

. В этом случае не вызывайте метод UseCors объекта IApplicationBuilder приложения в классе запуска метода настройки.

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...