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 相关文章推荐
用js实现随机返回数组的一个元素
Aug 13 Javascript
单独使用CKFinder选择图片的方法
Aug 21 Javascript
js实现单一html页面两套css切换代码
Apr 11 Javascript
JS案例分享之金额小写转大写
May 15 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
May 12 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
Apr 15 Javascript
jquery+CSS3实现3D拖拽相册效果
Jul 18 Javascript
vue使用keep-alive实现数据缓存不刷新
Oct 21 Javascript
浅谈FastClick 填坑及源码解析
Mar 02 Javascript
js中getter和setter用法实例分析
Aug 14 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
一个超简单的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
10条PHP编程习惯助你找工作
2008/09/29 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
php微信开发之谷歌测距
2018/06/14 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
简单介绍Python中的RSS处理
2015/04/13 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
python中的列表和元组区别分析
2020/12/30 Python
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
党员培训思想汇报
2014/01/07 职场文书
幼儿教师工作感言
2014/02/14 职场文书
优秀实习生感言
2014/03/01 职场文书
安全责任书范本
2014/04/15 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
2015大学迎新标语
2015/07/16 职场文书
7个关于Python的经典基础案例
2021/11/07 Python
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python