【发布时间】:2019-08-11 09:47:47
【问题描述】:
我需要配置一个使用 asp.net core 2.2 实现的 web api,以接受“空”源(“源”标头缺失或为空)。
在你从我的喉咙里跳出来之前:我知道有一个 null 起源是不好的。但不幸的是,我对此无能为力,因为调用是由传递空源的第三方服务器发出的,我无法控制它,所以我需要让我的 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 方法)时,我收到以下错误:
我怀疑一个 null/missing origin 只是在检查之前就被丢弃了......我是对的吗?有什么方法可以接受 null 来源吗?
【问题讨论】:
-
实际发生了什么让您认为有问题?您没有提到任何实际的异常或失败。
-
@UncleDave:你说得对,我已经编辑了错误的问题
-
您的问题是指由第三方“服务器”进行的调用,而屏幕截图显然是 chrome 开发工具,这意味着您正在从浏览器发送请求。这是一个非常重要的区别,因为浏览器是由于 CORS 而阻止响应的东西,而不是服务器。因此,如果您要从另一台服务器而不是浏览器发出请求,那么 CORS 将不会进入等式。但是,如果您打算从尝试将
app.UseCors移动到app.UseMvc上方的浏览器发送请求。 -
@UncleDave:我解决了这个问题(见我的回答)。但是要回答您的问题:是的,我正在使用我的浏览器,但我所在的页面位于我无法控制的服务器上。有问题的页面包含几个“插件样式”,并使用一些沙盒技巧来隔离这些部分(我认为它使用 iframe 来做到这一点)。结果是,如果您从这些“孤立”部分之一进行调用,则发出的来源为空,即使我在具有正确域名和所有内容的“真实”页面上。
-
好巧,我也解决了这个问题! (见我上面评论的结尾)。
标签: c# asp.net-core .net-core cors asp.net-core-mvc