一周以来,我一直在用头撞墙试图解决这个问题。希望有人能看到我遗漏的东西。
我有两个项目:localhost:A
(Web-Api) 托管一个 js 文件,localhost:B
(.NET MVC) 使用该 js 文件。当试图捕获 js 文件中的错误并将其发送到 localhost:A
时,我收到了一条神秘的 Script Error
消息,而不是实际错误。
Google 快速搜索告诉我这是一种防止 localhost:A
收集有关客户端的信息的安全措施。为了解决这个问题,我需要做两件事:
- 添加
crossorigin='anonymous'
localhost:B
对 js 文件的引用 - 将 HttpHeader
Access-Control-Allow-Origin="*"
添加到 js 文件响应中。
我找到了几种在 Web-Api 上执行 2. 的方法,但似乎都不起作用。
我试过像这样在 Web.config 文件中添加 header :
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
</customHeaders>
<httpProtocol>
我试过像这样在 Global.asax.cs 文件中添加 header :
public static void Register(HttpConfiguration config)
{
var corsAttr = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(corsAttr);
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
我试过像这样在 Startup.cs 文件中添加 header :
public void Configuration(IAppBuilder app)
{
//app.UseCors(CorsOptions.AllowAll);<--and here
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true
};
map.RunSignalR(hubConfiguration);
});
}
HTTP 和 SignalR 传输与 header 一起发生,但正在获取的文件缺少 header 。
我错过了什么?
编辑 2:如果我删除 startup.cs 中的代码,并在 web.config 中添加代码,我会开始获取 header ,但也会开始获取寻找信号器/集线器的 404 响应。将代码放在 startup.cs 和 webconfig 中会给我这个错误:The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.
最佳答案
我一直没能找到解决办法。我最终为 js/css 文件创建了一个 CDN,这允许我在 web.config 中设置自定义 header ,同时将信号器配置保留在另一个项目中。
关于javascript - 将Http Header 添加到静态文件解决 "Script Error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57041230/