Включить CORS на .NET Core Api? - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь разрешить моему приложению ANgular, работающему на localhost:4200, запрашивать данные из моего внутреннего интерфейса API .NET Core 2.2, работающего на localhost:44337.Я добавил политику Cores в ConfigureServices, добавил ее в Configure и добавил аннотацию UseCors на своих конечных точках, но все еще получаю эту ошибку:

Access to XMLHttpRequest at 'https://localhost:44337/api/users/1' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Startup.cs

public string DefaultCorsPolicy = "DefaultCorsPolicy";

public void ConfigureServices(IServiceCollection services) 
{
    services.AddCors(options =>
        {
            options.AddPolicy(DefaultCorsPolicy,
                builder =>
                {
                    builder
                        .AllowAnyHeader()
                        .AllowAnyMethod()
                        .WithOrigins("http://localhost:4200/");
                });
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors(DefaultCorsPolicy);
    app.UseMvc();
}

UsersController.cs

[HttpGet("{id}")]
[EnableCors("DefaultCorsPolicy")]
public async Task<ActionResult> GetUser(int id)
{
    var settings = await _service.GetUser(id);
    return Ok(settings);
}

Если я добавлю Response.Headers.Add("Access-Control-Allow-Origin", "*") в фактический метод GetUser, он будет работать.Но я не хочу грубой силы этого.

Я позаботился о том, чтобы сделать вызовы AddCors и UseCors в начале ConfigureServices и Configure соответственно.Но это все равно не сработает.

1 Ответ

2 голосов
/ 26 июня 2019

это то, что работает в моем случае (то же самое, что вы описали). Если это работает, вы можете начать сужаться.

services.AddCors(options =>
{
    options.AddPolicy(DefaultCorsPolicy,
        builder => builder
            .SetIsOriginAllowed((host) => true)
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());
});

конечно, у меня нет [EnableCors("DefaultCorsPolicy")] атрибута, так как я разрешаю его для всех методов .AllowAnyMethod().

...