.net mvc 几种跨域获取数据方案
方案一:
在web.conflg配置文件system.webServer节点中添加以下节点配置
<!--允许 "所有网站" 跨域访问写法:-->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
<add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>-
方案二: 某个方法允许跨域
在方法内添加代码: HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
方案三、 ajax-jsonp请求:
to:jsonp只支持get请求。
页面代码:
<script>
$.ajax({
url: 'http://localhost:54407/Home/GetJsonpData', //请求的url
dataType: "jsonp", //将请求类型设为值jsonp
//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
jsonp: "callback", //服务端会通过HttpContext.Request["callback"]; 拿到jsonpCallback这个回调函数的名称
jsonpCallback: "jsonpCallback", //自定义的jsonp回调函数名称"jsonpCallback",返回的json也必须有这个函数名称
success: function (json) {
console.log(json);
},
error: function (xhr, status, error)
{ console.log(xhr); }
});
</script>
后台代码:
[HttpGet]
public ActionResult GetJsonpData()
{
string callback = this.Request["callback"];
string data = "{\"msg\":\"hello world \"}";
this.Response.Write(callback + "(" + data + ")");
return new EmptyResult();