Включение CORS при запуске завершается с ошибкой перед проверкой - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь включить CORS в Startup.cs безуспешно. У меня есть приложение Angular на порту 4200, которое пытается связаться с моим веб-приложением c #. Я продолжаю получать эту ошибку в Angular

Не удалось загрузить http://localhost:52008/Account/GetJWT: Ответ на предпечатную проверку не имеет статуса HTTP ok.

Мои исследования показывают, что CORS не включен должным образом. Есть идеи, что мне не хватает?

public void ConfigureServices(IServiceCollection services)
{
.....
    services.AddCors(options =>
    {
        options.AddPolicy("EnableCORS", builder =>
        {
            builder.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials()
            .Build();
        });
    });
    .........
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.......
 app.UseCors("EnableCORS");
 ........
 }

И вот угловой запрос POST:

  login(form: NgForm) {
    let credentials = JSON.stringify(form.value);
    console.log(credentials);
    this.http.post("http://localhost:52008/Account/GetJWT", credentials, {
      headers: new HttpHeaders({
        "Content-Type": "application/json"
      })
    })
  }

Результат запроса POSTMAN

enter image description here

Ответы [ 4 ]

0 голосов
/ 20 сентября 2018

изменить на ваш web.config:

<system.webServer>

    ...

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Cache-Control" />
        <add name="Access-Control-Allow-Credentials" value="true" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
</httpProtocol>
</system.webServer>
0 голосов
/ 18 сентября 2018

Вы можете настроить ядра в файле startup.cs, как показано ниже, и добавить источник в ConfigurationServices, как показано ниже.

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // Shows UseCors with named policy.
    app.UseCors("AllowSpecificOrigin");

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

Добавить политику CORS к определенному действию.

[HttpGet]
[EnableCors("AllowSpecificOrigin")]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

Ссылка: Включить запросы кросс-источника (CORS) в ASP.NET Core

0 голосов
/ 19 сентября 2018

Используйте следующий код для включения CORS. Версия .NET Core: 2.1 и угловая версия: 1.6.7

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .AddJsonOptions(options =>
        {
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            options.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None;                
        });

        services.AddCors();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
    { 
        app.UseCors(options =>
        {
            options.AllowAnyMethod();
            options.AllowAnyOrigin();
            options.AllowAnyHeader();
        });

        app.UseMvc();
    }   
}

Угловой код:

$http.post("http://localhost:52008/Account/GetJWT", credentials,{
    headers: new HttpHeaders({
        "Content-Type": "application/json"
})).then(
function(response) {
    console.log(response);
},
function() {
    console.log("unable to login");
});

Дайте мне знать, если проблемы не исчезнут.

0 голосов
/ 18 сентября 2018
     public void ConfigureServices(IServiceCollection services)
        {
           //add cors service
            services.AddCors(options => options.AddPolicy("Cors",
                builder => {
                    builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader();
                } ));

            services.AddMvc(); // 

// --------------------------------------

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.




 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseCors("Cors");//------>let app use new service
        app.UseMvc();

    }

Внутри вашего контроллера убедитесь, что вы захватываете объект из тела

// post req

 [HttpPost]
    public Message Post([FromBody] Message message)
    {

    var msg = new Message { Owner = message.Owner, Text = message.Text };
    db.Messages.AddAsync(msg);
    db.SaveChangesAsync();

    return message;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...