开发者社区> 狼人2007> 正文

在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。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
6.3 ASP.NET Core Web API技术选择
ASP.NET Core Web API技术选择
60 0
6.1 ASP.NET Core Web 入门
ASP.NET Core中,严格来讲只有一个Asp.net Core MVC一个框架,Asp.net Core MVC既支持基于视图的MVC开发,也支持Web API和Razor Pages开发。
71 0
ASP.NET Core Web API 帮助页
ASP.NET Core Web API 帮助页
115 0
【浅谈ASP.NET】——Web服务应用实例
【浅谈ASP.NET】——Web服务应用实例
76 0
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
272 0
Oracle+ASP.Net Core Web API在云服务器上的部署
暑假数据库课程设计,我们小组选择vue+web api+Oracle开发网站,需要云服务器部署项目,对比后选择了阿里云服务器,并选择飞天加速计划——高校学生在家实践活动,一番摸索后实现了oracle数据库的建立与web api的发布,目前使用感觉良好。
160 0
Asp.Net Web 项目部署到阿里云 Windows版本服务器
Asp.Net Web 项目部署到阿里云 Windows版本服务器 前言:网上Asp.Net Web 项目部署到阿里云 Windows版本服务器的说法不一,最后参考多方上传后终于部署成功,写此文章总结一下网上的知识和自己的部署经验,以防自己忘记 工具 1. Visual Stuio 2019 2. sql server2019 3. 阿里云服务器 ECS 4. windows 11家庭版
197 0
ASP.NET Core 编码、web编码、网页编码System.Text.Encodings.Web
ASP.NET Core 编码、web编码、网页编码System.Text.Encodings.Web
106 0
ASP.NET Core+Quartz.Net实现web定时任务
此处我们的项目使用稍复杂的Quartz.net实现web定时任务。
559 0
+关注
狼人2007
个人对技术的追求:代码少而精捍;思路清晰美观;可扩展好维护;技术驱动商业; 人生格言:只要你有信念,有追求,并且坚持,那你一定比随波逐流,行得远行得正...
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PWA:移动Web的现在与未来
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多