问题描述
我在同一域下有一些Web应用程序,所有这些应用程序都使用独立的Identity Server 3应用程序进行登录。在测试环境下,其中的每一个都位于同一个域(http://192.168.100.1或dns http:// companyServer)下。
最近,一个应用程序需要从另一个应用程序请求一些数据,在Visual Studio上进行调试时,我发现了以下错误:
跨域请求被阻止:“相同来源策略”不允许读取http:// companyServer:60000 / MyApp / Api / Company / Info?parameter = 123上的远程资源。 (原因:CORS标头“ Access-Control-Allow-Origin”不存在)。
我们有一个中央库,负责在我们的系统上配置Web API,其中包括以下内容:
public static IAppBuilder UseCebiUtilWebApi(this IAppBuilder app,CebiWebApiOptions options)
{
Logger.Debug("Configuring Web API");
app.UseCors(CorsOptions.AllowAll);
...
}
使用相同的方法,我们还配置了Identity Server。
我还检查了我的Login Server App,并且有关于CORS的以下代码:
public class CompanyCorsPolicyService : DefaultCorsPolicyService
{
public CompanyCorsPolicyService()
{
base.AllowAll = true;
}
}
据我所知,我的环境的每一端都应启用完整的CORS访问权限,无论其来源是什么。但是标题仍然丢失。
我已经在互联网上尝试了很多解决方案:
Using "config.EnableCors" instead of "app.UseCors"
Overriding GrantResourceOwnerCredentials,
我也尝试过在Web.Config上手动设置一些与CORS相关的标头,但是我在SO上找不到特定的问题。
我不认为身份服务器与此问题有关,但是由于那是我的环境和找到的解决方案之间的区别,因此我决定也将其放在此处。
有什么想法吗?
解决方法
OPTIONSVerbHandler
可能会拦截所有OPTIONS
(CORS飞行前)请求。
尝试禁用该功能,以便ASP.Net可以处理这些请求。