ajax 跨域调用webapi,web api 跨域请求,ajax跨域调用webapi

比较一下json与jsonp格式的区别:

json格式:

{

"message":"获取成功",

"state":"1",

"result":{"name":"工做组1","id":1,"description":"11"}

}

jsonp格式:

callback({

"message":"获取成功",

"state":"1",

"result":{"name":"工做组1","id":1,"description":"11"}

})

看出来区别了吧,在url中callback传到后台的参数是神马callback就是神马,jsonp比json外面有多了一层,callback()。jquery

只须要给全局注册一个JsonCallbackAttribute,就能够判断接口的访问是属于跨域,仍是非跨域,正常的返回。git

由于咱们的接口,多是用来给 移动端(Android 、IOS)作数据接口,也有多是给网站用,因此,考虑到可能存在跨域的问题。github

GlobalConfiguration.Configuration.Filters.Add(new JsonCallbackAttribute());

5a936029ce7b49ffa214f551.html

5a936029ce7b49ffa214f551.html

public class JsonCallbackAttribute : ActionFilterAttribute

{

private const string CallbackQueryParameter = "callback";

public override void OnActionExecuted(HttpActionExecutedContext context)

{

var callback = string.Empty;

if (IsJsonp(out callback))

{

var jsonBuilder = new StringBuilder(callback);

jsonBuilder.AppendFormat("({0})", context.Response.Content.ReadAsStringAsync().Result);

context.Response.Content = new StringContent(jsonBuilder.ToString());

//context.Response.Content = new StringContent("C(\"a\")");

}

base.OnActionExecuted(context);

}

private bool IsJsonp(out string callback)

{

callback = System.Web.HttpContext.Current.Request.QueryString[CallbackQueryParameter];

return !string.IsNullOrEmpty(callback);

}

5a936029ce7b49ffa214f551.html

5a936029ce7b49ffa214f551.html

结合下面图片不难开出,请求的地址带回了,callback的参数标识。web

固然也能够用解决跨域问题的jQuery插件-jquery-jsonp,有第一种方式的基础,使用jsonp插件也就比较简单了,server端代码无需任何改动。json

五、服务端直接修改配置文件,我的认为这种方式好一点,毕竟咱们所写的api是对外公开的,安全访问的控制仍是要经过其余方法来保证。api

针对ASP.NET MVC,只须要在web.config中添加以下的内容便可跨域

针对ASP.NET Web API,除了上面这样的设置,还须要添加一个特殊的设计,就是为每一个APIController添加一个OPTIONS的方法,但无需返回任何东西。

public string Options()

{

return null; // HTTP 200 response with empty body

}

六、还有用CORS(跨域资源共享,Cross-Origin Resource Sharing)来解决的,CORS定义一种跨域访问的机制,可让AJAX实现跨域访问。CORS 容许一个域上的网络应用向另外一个域提交跨域 AJAX 请求。实现此功能很是简单,只需由服务器发送一个响应标头便可。

hander() 设置,

“*”号表示容许任何域向咱们的服务端提交请求:

80aaf5a28bcc809ec3cf7580e8f2e38c.png

也能够设置指定的域名,如域名 http://www.test2.com ,那么就容许来自这个域名的请求:

e8054c9c32fdd451cb2f78a7ea2b70ba.png

这种没有仔细研究,其实跟上面的配置文件,差很少,都是去设置响应头。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值