Не удается отправить запрос Ajax из-за CORS из моего приложения пользовательского интерфейса в приложение API, даже если CORS на API включен - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть приложения, которые расположены на одном источнике, но у них разные порты. Один - это пользовательский интерфейс, второй - API. Когда я отправляю запросы от «почтальона» или из браузера, код ответа - 200, и все в порядке, но когда я отправляю запрос выбросить ajax из моего приложения пользовательского интерфейса из браузера. Я получаю неудавшийся запрос из-за Cors , введите описание изображения здесь

Если это необходимо, при запуске я использую политику Cors и использую ее. Это метод ConfigureServices

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                x => x.MigrationsAssembly("CRM.API")));

            services.AddCors(options =>
            {
                options.AddPolicy("AllowAll",
                    builder =>
                    {
                        builder
                            .AllowAnyOrigin()
                            .AllowAnyMethod()
                            .AllowAnyHeader();
                        //.AllowCredentials();
                    });
            });

            services.AddHangfire(x => x.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));

            services.AddScoped<IEmailBirthdayManager, EmailBirthdayManager>();
            services.AddSingleton<IAccessManager, AccessManager>();

            services.AddControllers().AddNewtonsoftJson(options =>
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

            //services.AddMvc().AddNewtonsoftJson(options =>
            //    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "CRM.API", Version = "v1" });
                c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
            });
        } 

Есть способ настройки

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseSwagger();


            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });

            //            app.UseMiddleware<AuthorizationMiddleware>();

            app.UseHangfireDashboard("/hangfire", new DashboardOptions
            {
                Authorization = new[] { new HangfireDashboardAuthorizationFilter()}
            });

            app.UseHangfireServer();

            HangfireJobScheduler.ScheduleReccuringJobs();

            app.UseStaticFiles();

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseCors("AllowAll");

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Departments}/{action=GetDepartments}/{id?}");
            });
        } 

А также есть ajax Запрос к API

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
$.ajax({
        url: `https://p-host-crm-2.hostco.ru:1337/api/users/getUserByLogin/gorbunov`,
        async: false,
        success: function (data) {
            console.log("Data Loaded: ");
            console.log(data);
        }
    });

Что еще я пытался использовать [EnableCors("AllowAll")] в моем методе и контроллере Пробное использование AddDefaultPolicy" code and "app.UseCors() Пробное использование SetIsOriginAllowed(origin => true)

Если вы спросите меня каким веб-сервером я пользуюсь, отвечаю: IIS В настройках IIS я ничего не нашел

И любые предложения и решения от inte rnet мне не помогли

Ожидание за ваши ответы!

1 Ответ

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

в веб-конфигурации вы должны включить cors: config.EnableCors();, а затем вы должны установить происхождение, используя атрибут в вышеприведенном классе контроллера: [EnableCors(origins: "*", headers: "*", methods: "*")]

...