当前位置:  编程技术>.net/c#/asp.net

基于C#后台调用跨域MVC服务及带Cookie验证的实现

    来源: 互联网  发布时间:2014-10-19

    本文导语:  背景随着富客户端框架的盛行,以及众多优秀的前端js框架,很多情况我们会遇到跨域的问题,而js的ajax请求是不允许直接跨域访问的,当然你会说可以用JSONP等,但是由于代码洁癖,不想在前端和后台添加callback,而且很多情...

背景
随着富客户端框架的盛行,以及众多优秀的前端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 send
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString().TrimStart('&'));
            // Set the content length in the request headers
            request.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#后台线程访问前台控件并显示信息示例
  • c#中js调用后台的方法介绍
  • .net中前台javascript与后台c#函数相互调用问题
  • js调用后台c#代码的几种方法
  • c#异步操作后台运行(backgroundworker类)示例
  • C#与js前后台互相调用的实现代码
  • C#在后台运行操作(BackgroundWorker用法)示例分享
  • c#后台输出javascript语句示例程序
  • 求救!weblogic6.0后台运行正确,前台页面跳转或调用其他页面时出“页面无法显示错误”
  • 请问jsp怎么调用后台的存储过程?
  • 关于Excel做后台数据调用!已经变通到这样了!高手们来帮忙吧!
  • Asp.net后台调用js脚本的方法
  • .net后台代码调用前台JS的两种方式
  • jquery $.ajax()调用asp.net后台的方法
  • jquery.Ajax()方法调用Asp.Net后台的方法解析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • windows下cmd命令提示符下让程序后台运行命令
  • 后台管理框架 ZSWIN后台管理框架
  • 视频后台管理系统 悦视频后台
  • linux中怎么使后台进程的输出至控制终端?
  • 如何实现管道和后台进程
  • 程序后台运行有问题
  • 关于Linux后台进程【nohup】
  • 如何让一个进程直接转入后台?
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • '后台'是个什么概念
  • 作业控制中的前台作业和后台作业。
  • Linux如何将后台进程调到前台来
  • 怎么编写后台程序?
  • daemon打起的C后台进程,怎么看标准输出?
  • 如何停止Linux的后台服务
  • 后台进程和与控制终端断开的进程是一个意思吗?
  • linux下如何暂停后台运行的程序
  • 刚开始用linux写程序,问个简单的后台运行问题
  • 后台系统 DiliCMS
  • 进程在前后台运行时的内在原理
  • 网站后台插件 cenny.js


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3