代码改变世界

在ASP.NET M“.NET研究”VC3 中利用JSONP跨域登录WEB系统

  狼人:-)  阅读(203)  评论(0编辑  收藏  举报

  在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录。一般情况下我们需要在多系统之间使用多个用户名和密码。这样客户就需要在多个系统之间重复登陆。每次登录都需要输入用户名和密码。最近比较流行的就是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 =上海徐汇企业网站制作le="color: #000000;"> "@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(
"程序出错,请联系管理员.");
},
dataTy上海企业网站设计与制作pe:
"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 ExecuteR上海闵行企业网站设计与制作esult(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。

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示