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 相关文章推荐
浏览器无法运行JAVA脚本的解决方法
Jan 09 Javascript
ExtJs扩展之GroupPropertyGrid代码
Mar 05 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 Javascript
JS复制到剪贴板示例代码
Oct 30 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
May 13 Javascript
Node.js 使用命令行工具检查更新
Jun 08 Javascript
Bootstrap实现下拉菜单多级联动
Nov 23 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 Javascript
浅谈React中组件间抽象
Jan 27 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
Oct 29 Javascript
vue 中 beforeRouteEnter 死循环的问题
Apr 23 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 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
关于手调机和数调机的选择
2021/03/02 无线电
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
浅谈Python中的继承
2020/06/19 Python
绘画设计学生的个人自我评价
2013/09/20 职场文书
工作过失检讨书
2014/02/23 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
借条格式范本
2015/05/25 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
高中数学课堂教学反思
2016/02/18 职场文书