jQuery.ajax 跨域请求webapi设置headers的解决方案


Posted in Javascript onAugust 08, 2016

解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头、正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现。

1.第一步 服务端设置响应头,在webapi的web.config做如下设置

<system.webServer>
<httpProtocol>
<!--跨域配置开始-->
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" /><!--支持全域名访问,不安全,部署后需要固定限制为客户端网址-->
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /><!--支持的http 动作-->
<add name="Access-Control-Allow-Headers" value="Content-Type,X-Requested-With,token" /><!--响应头 请按照自己需求添加 这里新加了token这个headers-->
<add name="Access-Control-Request-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /><!--允许请求的http 动作-->
</customHeaders>
<!--跨域配置结束-->
</httpProtocol>

2.第二部 了解IE chrome 等浏览器 对于 跨域请求并要求设置Headers自定义参数的时候的 "预请求" 就是如果遇到 跨域并设置headers的请求,所有请求需要两步完成!

A 第一步:发送预请求 OPTIONS 请求。此时 服务器端需要对于OPTIONS请求作出响应 一般使用202响应即可 不用返回任何内容信息。(能看到这份手稿的人,本人不相信你后台处理不了一个options请求)options请求可在权限拦截器中处理

/// <summary>
/// 权限拦截器
/// </summary>
public class ApiAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.Method == HttpMethod.Options)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Accepted);
return;
}
}
}

B 第二步:服务器accepted 第一步请求后 浏览器自动执行第二步 发送真正的请求。

客户端代码:

$("#btnSumit").click(function () {
var Ticket = $.cookie("token");
var model = {
id: 1
};
$.ajax({
type: "POST",
url: "http://localhost:65312/api/products/FindProductById",
data: JSON.stringify(model),
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function (xhr) {
// //发送ajax请求之前向http的head里面加入验证信息
xhr.setRequestHeader("token", Ticket); // 请求发起前在头部附加token
},
success: function (data, status) {
if (data.statuscode == "401") {
alert(data.msg);
}
else
{
alert(JSON.stringify(data))
}
},
//error: function (XMLHttpRequest, textStatus, errorThrown) {
// alert(XMLHttpRequest.status);
// alert(XMLHttpRequest.readyState);
// alert(textStatus);
//},
complete: function () {
}
});
});

以上所述是小编给大家介绍的jQuery.ajax 跨域请求webapi设置headers解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
Javascript显示和隐藏ul列表的方法
Jul 15 Javascript
Javascript验证方法大全
Sep 21 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
jQuery实现的调整表格行tr上下顺序
Jan 10 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
javascript实现获取图片大小及图片等比缩放的方法
Nov 24 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
Nov 17 Javascript
JS数组reduce()方法原理及使用技巧解析
Jul 14 Javascript
ES6学习教程之Promise用法详解
Nov 22 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 #Javascript
Bootstrap Table服务器分页与在线编辑应用总结
Aug 08 #Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
Aug 08 #Javascript
BootStrap Table 分页后重新搜索问题的解决办法
Aug 08 #Javascript
用js读写cookie的简单方法(推荐)
Aug 08 #Javascript
Js遍历键值对形式对象或Map形式的方法
Aug 08 #Javascript
js中遍历Map对象的简单实例
Aug 08 #Javascript
You might like
PHP入门速成(2)
2006/10/09 PHP
php 前一天或后一天的日期
2008/06/28 PHP
PHP小教程之实现链表
2014/06/09 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
简单的三步vuex入门
2018/05/20 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
Python实现矩阵转置的方法分析
2017/11/24 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
学校关爱留守儿童活动方案
2014/08/27 职场文书
财政局长个人总结
2015/03/04 职场文书
认识实习感想
2015/08/10 职场文书
JavaScript原型链详解
2021/11/07 Javascript