Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从跨域API获取数据_C#_Javascript_Json_Api - Fatal编程技术网

C# 如何从跨域API获取数据

C# 如何从跨域API获取数据,c#,javascript,json,api,C#,Javascript,Json,Api,我试图从不同域中的API获取数据,但出现以下错误: 无法加载XMLHttpRequest。不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“localhost” 进入 我试图将此添加到标题中,但仍然无法工作: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title&

我试图从不同域中的API获取数据,但出现以下错误:

无法加载XMLHttpRequest。不 “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>
我不能使用JSONP,因为该网站不支持此功能。 我如何在不同的域上使用JSON从API接收数据?
我想使用JavaScript或C#

将类添加到项目中并用它标记控制器

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);
        }
    }
}
然后在控制器中添加到控制器方法选项,因为如果允许交叉,则第一个调用将是要获取的选项

[System.Web.Http.AllowAnonymous]
public HttpResponseMessage Options()
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}
(请注意,此处您不允许所有域,但可以用域列表替换“*”)

或使用web配置(但适用于所有控制器)


如果允许*使用CORS,则会产生安全影响。任何其他网站的脚本都可以从登录用户浏览器上的api获取数据。
不要将*用于CORS,而是将您允许的主机列为白名单。

这不是真正的标题,而是由您联系的服务器设置的请求标题,因此,如果不是您的服务器,您将无能为力。但我认为web配置选项可以解决这两个问题,所以您应该尝试,但我不确定。
[System.Web.Http.AllowAnonymous]
public HttpResponseMessage Options()
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}
<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>
Response.AppendHeader("Access-Control-Allow-Origin", "*");