我正在尝试从其他域中的API获取数据但我收到此错误:
XMLHttpRequest无法加载https://www.bitstamp.net/api/ticker/。没有 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许原点'localhost' 访问。
我尝试在标题中添加它,但它仍然不起作用:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
Access-Control-Allow-Origin: https://www.bitstamp.net
</head>
<body>
<script src="Index.js"></script>
</body>
</html>
这是我的JavaScript:
var ticker = "https://www.bitstamp.net/api/ticker/";
$.ajax({
dataType: "json",
url: ticker,
type: "POST",
crossDomain: true,
scriptCharset: "utf-8"
});
我无法使用 JSONP ,因为该网站不支持此功能。 如何在不同的域上使用JSON从API接收数据? 我想用 JavaScript或C#执行此操作。
答案 0 :(得分:2)
为您的项目添加课程并用它标记您的控制器
public class AllowCrossSiteAttribute : ActionFilterAttribute {
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Response != null)
actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
base.OnActionExecuted(actionExecutedContext);
}
}
}
然后在Controller中添加到控制器方法选项,因为如果允许CROSS,第一次调用将是获取的选项
[System.Web.Http.AllowAnonymous]
public HttpResponseMessage Options()
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
(请注意,此处您不允许使用所有域名,但您可以使用域名列表替换&#34; *&#34;
或使用网络配置(但它适用于所有控制器)
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
asp.net网络表单的选项可能是
Response.AppendHeader("Access-Control-Allow-Origin", "*");
答案 1 :(得分:0)
如果允许*使用CORS,则会对安全产生影响。来自任何其他网站的脚本将能够从登录用户浏览器中的api获取数据。 永远不要使用*与CORS,将您允许的主机列入白名单。