您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

ASP.NET MVC3 中利用Jsonp跨域访问

添加时间:2014-8-10 21:42:29  添加: 思海网络 

 在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录。一般情况下我们需要在多系统之间使用多个用户名和密码。这样客户就需要在多个系 统之间重复登陆。每次登录都需要输入用户名和密码。最近比较流行的就是OAuth。新浪微博这个开放系统做的就很好。但OAuth并非本文讨论范畴。这里 主要讨论jQuery1.5 jsonp 在Asp.net MVC3 中的应用。

    本文应用场景:

        假设您的开发团队欲为某集团公司开发一整套信息管理系统,目前首要开发的就是一套订单系统和一套内部OA系统。前提是这两套系统使用同一套数据库。只是两 个不同的MVC3.0 Web项目。也就是说会在同一个IIS上部署两个虚拟目录。  我们的目标是在不使用WCF、WebService 等技术实现跨域登录。也就是说用户用同一个帐号登录了订单系统,那么客户就可以直接登录OA系统。而不需要在OA系统上再输入一次用户名和密码。反之亦成 立。

    jQuery1.5 JSONP 使用:

< type="text/java">
       $(function () {
 3var oAUri ="@ViewBag.OAVRUri";
 4var user ="@ViewBag.User";
 5var pwd ="@ViewBag.PassWord";
 7            $.ajax({
               type: "GET",
               url: String.format('{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?', oAUri, user, pwd),
               cache: false,
               error: function () {
                   alert("程序出错,请联系管理员.");
               },
               dataType: "jsonp",
               jsonp: 'callback',
               success: function (result) {
                }
           });
        });
</>

在MVC3.0中建立JSONP专用ActionResult

      代码如下:

publicclass JsonpResult<T> : ActionResult
    {
public T Obj { get; set; }
publicstring CallbackName { get; set; }

public JsonpResult(T obj, string callback)
        {
this.Obj = obj;
this.CallbackName = callback;
        }

publicoverridevoid ExecuteResult(ControllerContext context)
        {
            var js =new System.Web..Serialization.JavaSerializer();
            var jsonp =this.CallbackName +"("+ js.Serialize(this.Obj) +")";

            context.HttpContext.Response.ContentType ="application/json";
            context.HttpContext.Response.Write(jsonp);
        }
    }

JsonpResult 简单调用如下:

 public ActionResult AppLogOn(string UserName, string PassWord, string callback)
{

			returnnew JsonpResult<object>(new { success =true, rankName = rankName }, callback);
}

AppLogOn的action参数完全和上文中的jquery $.ajax 参数一致:

url: String.format('{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?', oAUri, user, pwd)小结:      Jsonp的服务器端的原理其实就是回调一个js函数名(这里是callback参数)将该参数传给服务端,接着再由服务器端执行这个callback js函数,
同时附上该js函数的参数。比如上文的C#代码:
var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";还有一点我们要注意的就是安全隐患问题:
在使用jsonp由于涉及到跨域,需要考虑到对方站点或者对方系统的安全性问题。应当避免安全隐患,不能滥用jsonp。
关键字:Jsonp、跨域访问、ASP.NET 、服务器

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站