CORS с сообщениями из углового приложения в основной API asp.net на локальном ПК - PullRequest
0 голосов
/ 19 января 2019

У меня есть локальная служба ядра ASP.NET API и локальное приложение Angular. Большая часть моих вызовов проходит нормально для API, но один вызов продолжает давать мне ошибки CORS. Я подозреваю, что это потому, что это после операции? Должны ли сообщения что-то отличаться в соответствии с CORS?

Anuglar ts:

loadGroup(groupName:string){
    this.apiService.getInfluencersWithFilter(this.query,groupName,null,null,this.ageRanges).subscribe((data) => {     
      this.influencerSearchResult = data.results;
      // this.searchGroupsFacet = data.facetGroupList;
      this.searchSubGroupsFacet = data.facetSubGroupList;
      this.showSubGroups = true;

   });
  }

Угловой сервис:

getInfluencersWithFilter(q:string, group:string, subGroups:string[], socialAccounts:string[],ageRanges:AgeRange[]):Observable<InfluencerSearchContainer>
{    
        if(q==null)
        {
          q = "";
        }
        var url = `${environment.apiDomain}/api/InfluencersSearch/`;
        return  this.httpClient.post<InfluencerSearchContainer>(url,{q:"",group:group,subGroups:subGroups, socialAccounts:socialAccounts, ageRanges:ageRanges}).pipe(
          map(x => new InfluencerSearchContainer(x)));      
 }

Запускаемое ядро ​​ASP.NET:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<DocumentClient>((s) =>
        {
            string EndpointUrl = Configuration["CosmosDB:EndpointUrl"];
            string PrimaryKey = Configuration["CosmosDB:PrimaryKey"];
            return new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
        });

        var connStr = Configuration.GetConnectionString("DefaultConnection");
        services.AddDbContext<DB>(options => options.UseSqlServer(connStr));

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

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

  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseCors("AllowSpecificOrigin");
        app.UseHttpsRedirection();
        app.UseMvc();
    }

И контроллер:

  [HttpPost]
    public InfluencerSearchResultWithFacets Post([FromBody] InfluencerQuery q)
    {
        return GetSearchResult(q.q, q.group,q.subGroups, q.socialAccounts, q.ageRanges);
    }

Есть ли что-то, чего мне не хватает? Я думаю, что здесь все отключено? Когда я пишу, я подозреваю, что с Post это связано, потому что действия get работают.

В почтальоне это работает: enter image description here

Я также добавил следующее на контроллере: [EnableCors ( "AllowSpecificOrigin")]

1 Ответ

0 голосов
/ 19 января 2019

Иногда

1) Если имеется ошибка в ошибке полезной нагрузки (или) запроса в API, консоль инструментов разработчика Chrome показывает CORS.

Пожалуйста, console.log запрос и проверьте API отдельно с почтальоном / чванством с этим.

Если 1) не решить проблему

2) Иногда IIS может блокировать операции PUT и POST по умолчанию. Пожалуйста, смотрите это .

если 1) и 2) не решить проблему

Это также может быть проблемой

3) Возможно, нам придется добавить [EnableCors ("AllowSpecificOrigin")] к контроллеру.

...