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 相关文章推荐
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
Sep 14 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
Apr 16 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
kindeditor修复会替换script内容的问题
Apr 03 Javascript
用JavaScript实现对话框的教程
Jun 04 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
May 27 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
js 获取经纬度的实现方法
Jun 20 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
React学习之JSX与react事件实例分析
Jan 06 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
一个php作的文本留言本的例子(六)
2006/10/09 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
Javascript缓存API
2016/06/14 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python正则分析nginx的访问日志
2017/01/17 Python
分分钟入门python语言
2018/03/20 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
心理健康心得体会
2014/01/02 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
教师岗位职责
2015/02/03 职场文书
请假条应该怎么写?
2019/06/24 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
anaconda python3.8安装后降级
2021/06/11 Python
go goroutine 怎样进行错误处理
2021/07/16 Golang
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android