在ASP.NET MVC3 中利用JSONP跨域登“.NET技术”录WEB系统

简介:   在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录。一般情况下我们需要在多系统之间使用多个用户名和密码。这样客户就需要在多个系统之间重复登陆。每次登录都需要输入用户名和密码。最近比较流行的就是OAuth。

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

  本文应用场景:

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

  jQuery1.5 JSONP 使用:

 
 
< script type = " text/javascript " >
$(
function () {
var oAUri = " @ViewBag.OAVRUri " ;
var user = " @ViewBag.User " ;
var pwd = " @ViewBag.PassWord " ;

$.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) {

}
});

});
< / script>

  在MVC3.0中建立JSONP专用ActionResult。

  代码如下:

 
 
public class JsonpResult < T > : ActionResult
{
public T Obj { get ; set ; }
public string CallbackName { get ; set ; }

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

public override void ExecuteResult(ControllerContext context)
{
var js
= new System.Web.Script.Serialization.JavaScriptSerializer();
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)
{
return new 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。

目录
相关文章
|
2月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
35 4
|
2月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
29 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0
|
2月前
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
32 0
|
.NET 开发框架 前端开发
|
Web App开发 JavaScript 前端开发
《精通 ASP.NET MVC 3 框架(第三版)》---- 1.2 当今的Web开发
除微软之外,自Web Form首次发布以来,Web开发技术发展迅速,这表现在几个不同的方向。除了已经提及的AJAX之外,还有一些其他的主要发展。
2044 0
|
Web App开发 JavaScript 前端开发
《精通 ASP.NET MVC 4》----1.2 当今的Web开发
近年来,向Web标准兼容的趋势已在增强。Web网站建立在比以往更广泛的设备和浏览器之上,Web标准(HTML、CSS、JavaScript等)使人们有望在任何地方——甚至在可联网的冰箱上——都可以有相当好的浏览体验。现代Web平台不能忽视这种商业环境和开发者对遵从Web标准的追求。
2060 0
|
Web App开发 JavaScript 前端开发
《精通 ASP.NET MVC 5》----1.2 当今的Web开发
近年来,朝着Web标准兼容的趋势在增长。Web网站也在比以往更为广泛的设备和浏览器上使用,Web标准(HTML、CSS、JavaScript等)使人们有望在不同的设备上享受一致的浏览体验。现代Web平台不可忽视这种商业环境和开发者对Web标准兼容的追求。
2027 0