首页 > 解决方案 > CORS,从 Angular 应用程序到本地 pc 上的 asp.net 核心 API 的帖子

问题描述

我有一个本地运行的 ASP.NET 核心 API 服务和一个本地 Angular 应用程序。我的大部分调用对 API 都很好,但一个调用不断给我 CORS 错误。我怀疑是因为它是后期操作?根据 CORS,帖子是否需要任何不同的内容?

角 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 操作有效。

在邮递员中它可以工作: 在此处输入图像描述

我还在控制器上添加了以下内容:[EnableCors("AllowSpecificOrigin")]

标签: angularasp.net-coreasp.net-core-2.0

解决方案


有时,

1)如果api中的request payload有错误(或)错误,chrome开发者工具控制台显示CORS。

请 console.log 请求并使用 postman/swagger 分别测试 api。

如果 1) 没有解决问题

2) 有时 IIS 默认会阻止 PUT 和 POST 操作。请看这个

如果 1) 和 2) 没有解决问题

这也可能是个问题

3) 我们可能必须将 [EnableCors("AllowSpecificOrigin")] 添加到控制器。


推荐阅读