我需要配置一个使用asp.net core 2.2实现的Web api,以接受“空”来源(“ Origin”标头丢失或为空)。
在您跳下嗓子之前:我知道原点为空是不好的。但是不幸的是,我对此无能为力,因为调用是由传递了空原点的第三方服务器进行的,并且我无法控制它,因此我需要使我的api接受空原点。
我尝试这样做:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseHsts();
app.UseMvc();
app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
}
...
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
//Configuring CORS
services.AddCors();
}
,但没有任何区别。当我发出POST请求(使用jQuery的ajax方法)时,出现以下错误:
我怀疑一个空/缺失的原点在检查之前就被丢弃了……对吗?有什么方法可以接受空原点吗?
答案 0 :(得分:4)
必须将CORS中间件放在MVC中间件之前,否则MVC中间件(和您的控制器)将发送响应,而不会允许CORS中间件运行。
将您的配置方法更改为此:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseHsts();
app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
app.UseMvc(); // Add this middleware last.
}
AddMvc
方法中AddCors
和ConfigureServices
的顺序无关紧要。
答案 1 :(得分:0)
好,我解决了。问题非常简单:必须在UseCors()
和AddCors()
方法之前调用Startup类中的UseMvc()
和AddMvc()
方法。