C#后台调用跨域MVC服务,带Cookie验证
背景
随着富客户端框架的盛行,以及众多优秀的前端js框架,很多情况我们会遇到跨域的问题,而js的ajax请求是不允许直接跨域访问的,当然你会说可以用JSONP等,但是由于代码洁癖,不想在前端和后台添加callback,而且很多情况你是无法控制的,需要牵连考虑太多的情况。
所以我直接绕过了,每个前端应用,自带一个通用后端服务代理,该服务解决跨域问题,自动代理帮前台获取跨域的数据。
如何算跨域
虽然是个老问题,但是还是要提醒注意下两点:同IP,不同端口,数据访问是跨域的,但是Cookie访问是可以的(这个让我很难理解)
解决,源码
CookieContainer cookieContainer = new CookieContainer();[HttpPost]public string CommonPost(string url){log.Info(CookieHelper.GetCookie("ITDC_UserName") + "进入方法CommonPost Url=" + url);Uri address = new Uri(System.Configuration.ConfigurationManager.AppSettings["RESTfulAPI"].ToString() + url);HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";//远程服务,需要加入cookie验证cookieContainer.Add(address, GetCookie("ITDC_UserName"));cookieContainer.Add(address, GetCookie("ITDC_UserRole"));request.CookieContainer = cookieContainer;StringBuilder data = new StringBuilder();for (int i = 0; i < Request.QueryString.Count; i++){if (Request.QueryString.Keys[i].ToString() == "url") continue;data.Append("&" + Request.QueryString.Keys[i].ToString() + "=" + Request.QueryString[i].ToString());}// Create a byte array of the data we want to sendbyte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString().TrimStart('&'));// Set the content length in the request headersrequest.ContentLength = byteData.Length;// Write data using (Stream postStream = request.GetRequestStream()){postStream.Write(byteData, 0, byteData.Length);} string result = "";using (HttpWebResponse response = request.GetResponse() as HttpWebResponse){StreamReader reader = new StreamReader(response.GetResponseStream());result = reader.ReadToEnd();}log.Info(CookieHelper.GetCookie("ITDC_UserName") + " 执行完成 CommonPost Url=" + url);return (result);}
前台调用
Ext.Ajax.request({url: APIUrl + '/Nebula/CommonPost?url=/Nebula/PostComment/&KlId=1&Msg=ok&Author=admin&Title=文章标题',method: "POST",success: function (response) {Ext.Viewport.unmask();var obj = Ext.decode(response.responseText);Ext.Msg.alert("提示", obj.Msg, Ext.emptyFn);},failure: function (response) {Ext.Viewport.unmask();Ext.Msg.alert("提示", "操作失败,请检查网络!", Ext.emptyFn);} });
C#后台调用跨域MVC服务,带Cookie验证相关推荐
- axios库读不到cookie_Vue axios 跨域请求无法带上cookie的解决
Vue axios 跨域请求无法带上cookie的解决 在main.js设置 // 携带cookie axios.defaults.withCredentials = true 补充知识:VUE ax ...
- ajax提交不能进入后台_Ajax跨域问题
今天写表单提交时候遇到个问题, 每次提交都提示是跨域的问题,捣鼓了半天,发现少了个属性 后台的跨域设置: 前台form表单提交: 解决方式: 在表单提交时候加2个属性 访问正常 解决跨域请求问题,首先 ...
- java 服务端 处理跨域_javaweb服务端跨域支持
项目开发为了支持web浏览器ajax的直接请求,涉及到了跨域的需求,通过学习对跨域有了更深入的认识,现在总结一下: 1.跨域说明 跨域指请求和服务的域不一致,浏览器和H5的ajax请求有影响,而对服务 ...
- Java后台解决跨域问题
Java后台解决跨域问题 参考文章: (1)Java后台解决跨域问题 (2)https://www.cnblogs.com/qinyuanyuan/p/11380379.html 备忘一下.
- axios跨域携带cookie_axios 跨域处理以及带 cookies 的请求
背景 在开发 vue 的项目时,使用 axios 来与后端交互,经常会遇到几个问题 请求跨域 请求中带 cookies 请求跨域解决方案 解决请求跨域有以下两种方案 同源访问 后端允许跨域请求 这里主 ...
- 面试官问:跨域请求如何携带cookie?
大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列 ...
- 前台关于跨域的警告A cookie associated with a cross-site resource at .........,代理服务器
前台关于跨域的警告A cookie associated with a cross-site resource at -,代理服务器 A cookie associated with a cross- ...
- 谷歌浏览器升级到91出现跨域问题,导致cookie保存的sessionId不一样
先来说一下问题: 谷歌浏览器升级到91之后出现一个跨域问题,导致cookie保存的接口sessionId不一致,从而后台出现session不一致问题.如下图: 这是第一个接口: 这是第二个接口 这本应 ...
- ajax请求时cookie,ajax跨域请求中的cookie问题
update 另一个问题 ajax在进行复杂请求如PUT,POST,DELETE等时,当请求为cross domain request是,会先发一个OPTIONS请求确认服务器的跨域支持情况,在发送原 ...
- Ajax跨域请求时携带cookie
在使用Ajax技术发送跨域请求时,默认情况下是不会在请求中携带cookie信息的. 如果需要在跨域请求中携带cookie,则需要对客户端和服务器都进行设置. 客户端代码: xhr.withCreden ...
最新文章
- xx.xib: error: Illegal Configuration: Safe Area Layout Guide before iOS 9.0报错问题解决
- Winform中给DataGridView添加多选框列并获取选中行的内容
- Linux环境下Redmine的安装(一)
- 比特币的区块结构解析
- c# 拼接Json串的几种方法
- 蓝桥杯 2011年第二届C语言初赛试题(5)
- raspberry pi_如何购买Raspberry Pi
- ios view 切上部分圆角_IOS开发入门之给view添加圆角并指定位置
- (笔记) SpringCloud之Hystrix断路器 属性详解
- Error launching Console Application PDFLaTeX
- 三分钟带你了解PPT图标
- matlab gui串口通信,Matlab GUI上位机界面实现串口通信
- coalesce函数详解--判空三目表达式
- 求三点共圆求圆心半径及其推导(三角形外心)
- 用友T+、U8、NC系列,致远OA产品二次开发
- Tensorflow使用LSTM实现中文文本分类(1)
- OA系统中如何实现合同管理?
- 常见网络设备/应用的默认密码的几种收集方式
- Boom 3D播放器功能详解
- jQuery 插件—— 懒加载