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 相关文章推荐
iframe 自适应高度[在IE6 IE7 FF下测试通过]
Apr 13 Javascript
对象特征检测法判断浏览器对javascript对象的支持
Jul 25 Javascript
JS+CSS实现的蓝色table选项卡效果
Oct 08 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
Oct 10 Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 Javascript
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
JS实现div模块的截图并下载功能
Oct 17 Javascript
JS脚本加载后执行相应回调函数的操作方法
Feb 28 Javascript
vue动态绑定class选中当前列表变色的方法示例
Dec 19 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
Jul 20 Javascript
vue 二维码长按保存和复制内容操作
Sep 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
怎么在Windows系统中搭建php环境
2013/08/31 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
详解node child_process模块学习笔记
2018/01/24 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
市场开发计划书
2014/05/07 职场文书
教师教学评估方案
2014/05/09 职场文书
离婚协议书范文2015
2015/01/26 职场文书
计划生育个人总结
2015/03/02 职场文书
护士自我推荐信范文
2015/03/24 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Python实现双向链表
2022/05/25 Python