【发布时间】:2019-01-08 01:44:48
【问题描述】:
我正在为一个使用在 WebApi 5.2.4 上运行的后端服务器的 javascript Web 应用程序进行 selenium 测试(使用 chrome webdriver 用 C# 编写)。它通过非常宽松的设置启用了 CORS:
namespace SealingService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// etc...
}
}
}
通常一切都按预期进行。但是在某些机器上,当服务器由测试脚本启动时,客户端在每个请求上都会遇到 CORS 错误。 chrome 开发控制台显示标准的Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 消息。服务器日志显示 OPTION 请求正在到达它,并且它正在发送响应。
当我尝试手动访问任何 API 路由时,服务器会返回通用 ASP.NET 404 页面。这让我觉得我们的 CORS 配置实际上可以正常工作,但是我们的测试脚本没有正确启动/配置服务器,因此没有注册路由。因此,所有 API 路由都返回 404 页面,这显然没有启用 CORS。
This is the applicationhost.config used by IIS during the tests.测试脚本是这样启动服务器的:
public static Process StartIIS(string siteName)
{
return Process.Start(@"C:\Program Files (x86)\IIS Express\iisexpress.exe", $"/site:{siteName} /config:{_applicationHostConfigFilePath}");
}
这些错误只发生在某些机器上,我们无法弄清楚它们之间的配置有何不同。我尝试使用 Chrome 的 --disable-web-security 标志,但似乎没有任何区别。
【问题讨论】:
-
我还没有尝试过那个特定的扩展,但根据它的描述,它与我尝试过的
--disable-web-security标志做同样的事情。在这一点上,我很确定该错误实际上与 CORS 无关,而是与 IIS 的配置方式有关(请参阅原始问题中的配置文件) -
你的标题响应是什么
标签: c# google-chrome selenium asp.net-web-api cors