CORS на asp. net core web api не работает после развертывания на IIS - PullRequest
0 голосов
/ 04 февраля 2020

Я разрабатываю ядро ​​net webapi с angular интерфейсом. Когда я отлаживал все работает нормально, теперь, когда я развернул веб-интерфейс на IIS, я не могу заставить его работать, он дает мне ошибки CORS: "...No 'Access-Control-Allow-Origin' header is present on the requested resource."

вот код для включения CORS в сети api:

public void ConfigureServices(IServiceCollection services)
{
...
    services.AddCors();

...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
    app.UseCors(x => x
        .AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader());

Я пробовал другое решение, которое я нашел на этом и других сайтах, кажется, ничего не работает

я должен добавить какой-нибудь заголовок в мое приложение angular? Может ли быть проблема с IIS?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Мне наконец удалось решить проблему: я включил «Аутентификацию Basi c» на IIS, потому что я ошибочно подумал, что это правильно.

Я обнаружил, что IIS «Basi c аутентификация "отличается от того, что я реализовал (я создал пользовательский" BasicAuthenticationHandler ", который читает заголовки и проверяет пользователей)

Проблема заключалась в том, что IIS (или Angular, или Chrome, я не знаю) вместо того, чтобы возвращать ошибку «401 не авторизован», мне выдалась ошибка CORS, даже если была включена «Анонимная аутентификация» (обязательно отключить все остальные аутентификации).

0 голосов
/ 04 февраля 2020

Возможно, вы захотите взглянуть на это.

В вашем файле Startup.cs

// This method gets called by the runtime. Use this method to add services to the container.
      public void ConfigureServices(IServiceCollection services)
      {
           services.AddCors(cfg =>
           {
                cfg.AddDefaultPolicy(policy =>
                {
                     policy.WithOrigins("list of origins to allow here")
                     .AllowAnyHeader()
                     .AllowAnyMethod()
                     .AllowCredentials()
                     .SetIsOriginAllowed((_) => true)
                     .SetIsOriginAllowedToAllowWildcardSubdomains();
                });
           });


services.AddMvc()
                .AddJsonOptions(options =>
                {
                     options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                     options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                     options.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
                })
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
      }


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
      {
         app.UseCors();
         app.UseMvc(routes =>
           {
                routes.MapRoute(
                     name: "default",
                     template: "{controller=Home}/{action=Index}/{tag?}");
           });
      }

Убедитесь, что Cors вызывается до вызова MVC.

Надеюсь, это поможет.

С уважением

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