最近在使用layui时遇到一些跨域问题,比如上传或者table请求api数据,跨域请求没有暴露出来可以增加xhrFields: {withCredentials: true}的参数,这样服务端是取不到cookie的数据,不过可以曲线救国,比如把cookie数据通过参数传到服务端或者封装到head里,另外在网上找到一篇不错的,亲试有效
原文链接:https://blog.csdn.net/qq_38261174/article/details/90405524
详细见:https://www.cnblogs.com/nuccch/p/7875189.html
或:https://harttle.land/2016/12/28/cors-with-cookie.html
1.layui框架设置如下:
layui.use(['form', 'laydate', 'table', 'upload'], function () { var form = layui.form, laydate = layui.laydate, table = layui.table, upload = layui.upload, $ = layui.$; //ajax全局参数设置 $.ajaxSetup({ // dataType : "json", // contentType : "application/json", // headers : { // 'Content-Type' : 'application/x-www-form-urlencoded' // }, // 同步 // async:false, // 默认true,异步 // 发送cookie xhrFields: { withCredentials: true }, // 请求发送前 beforeSend: function () { // 发送请求前,可以对data、url等处理 }, // 请求返回 complete: function () { // 返回数据,根据数据调转页面等 } }); // 渲染表数据 本来请求不带cookie,但上面设置了ajax全局参数,所以请求可带cookie table.render({ elem: '#table', url: apiBaseUrl + ... cols: tableTitles, page: true , text: '暂无相关数据' , done: function (res, curr, count) { layer.closeAll('loading'); } }); 后台获取如下: HttpContext.Request.Cookies.TryGetValue("FaceUserKey", out string userNameOfEcrypt)
2.通过请求头设置的方法如下:
//ajax全局配置 $.ajaxSetup({ headers: { "authorization": $.cookie("FeUserKey") }, //xhrFields: { // withCredentials: true //}, //crossDomain: true }); 后台接收如下: var userNameOfEcrypt = HttpContext.Request.Headers["authorization"];
生活最终回归平淡