Asp.net Core 3.0 CORS не работает на основе официальной документации - PullRequest
0 голосов
/ 30 октября 2019

Я хочу включить CORS с проектом Asp.Net Core 3.0 API. Это базовый сгенерированный шаблон Asp.Net Core Api. Все по умолчанию из шаблона, за исключением того, что я добавил параметры CORS из документации: Включить запросы кросс-происхождения (CORS) в ASP.NET Core

Вот это мой Startup.cs

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.AddControllers();
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.WithOrigins("localhost", "www.google.com")
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseCors("CorsPolicy");
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
  }

А это мои заголовки ответов: enter image description here

Что мне нужно настроить для получения правильных заголовков CORS в Response?

Вот ономой выборочный тест API: enter image description here

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Упс, мне удалось решить эту проблему.

Эта комбинация была единственной для меня, что работает:

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.AddControllers();
            services.AddCors(); //This needs to let it default
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseCors(
                options => options.SetIsOriginAllowed(x => _ = true).AllowAnyMethod().AllowAnyHeader().AllowCredentials()
            ); //This needs to set everything allowed

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
}
0 голосов
/ 30 октября 2019

Если вы поместите URL API прямо в браузер, CORS не будет задействован. Это не перекрестный запрос.

Это происходит только тогда, когда у вас есть страница, размещенная в одном источнике, например, localhost: 5000, в которой есть код JavaScript, который вызывает API в источнике localhost: 5001. (или иным образом получает ресурсы из другого источника)

Но в вашем случае единственным источником является источник API, и, следовательно, CORS не нужен.

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