angular - 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")]
解决方案
有时,
1)如果api中的request payload有错误(或)错误,chrome开发者工具控制台显示CORS。
请 console.log 请求并使用 postman/swagger 分别测试 api。
如果 1) 没有解决问题
2) 有时 IIS 默认会阻止 PUT 和 POST 操作。请看这个。
如果 1) 和 2) 没有解决问题
这也可能是个问题
3) 我们可能必须将 [EnableCors("AllowSpecificOrigin")] 添加到控制器。
推荐阅读
- xtext - 如何使用 Xtext 生成解析器生成器?
- ibm-integration-bus - IIB v10:将局部变量传递给 ESQL 选择语句
- azure-log-analytics - 共享 Log Analytics 报告
- jmeter - 在 JMeter 中保存 bean shell 断言时出现访问被拒绝错误
- python - 表单 Datefield 传递 None 以在 django 中发布数据表单
- excel - 将多个 xlsx 和 xls 文件合并到一个工作簿中
- react-native - RN - 在仍然滚动时滑动动画平面列表卡住
- go - 通过 golang 程序启动的杀戮过程
- plugins - 从插件创建文件/文件夹时如何处理安全权限
- scala - Apache Spark SQL 查询和 DataFrame 作为参考数据