ASP.NET MVC 3でJSONPを利用してドメイン間でWEBシステムにログイン
14363 ワード
情報システムの開発に際しては,関連業務ロジックにより多系統間の相互登録が避けられない.一般的には、複数のシステム間で複数のユーザー名とパスワードを使用する必要があります.これにより、お客様は複数のシステム間でログインを繰り返す必要があります.ログインするたびにユーザー名とパスワードを入力する必要があります.最近流行っているのがOAuthです.新浪微博というオープンシステムはよくできています.しかしOAuthは本論文の議論の範疇ではない.ここでは主にjQuery 1について議論する.5 jsonpはAsp.NetMVC 3のアプリケーション.
この文書では、シーンを適用します.
あなたの開発チームがあるグループ会社のために情報管理システムを開発したいと仮定すると、現在最も重要な開発は受注システムと内部OAシステムです.この2つのシステムが同じデータベースを使用することを前提としています.ただ2つの異なるMVC 3.0 Webプロジェクト.つまり、同じIIS上に2つの仮想ディレクトリが配置されます.WCF、WebServiceなどのテクノロジーを使用せずにドメイン間ログインを実現することを目標としています.すなわち,ユーザが同じアカウントで受注システムにログインすると,クライアントは直接OAシステムにログインすることができる.OAシステムにユーザー名とパスワードをもう一度入力する必要はありません.逆も成り立つ.
jQuery1.5 JSONP使用:
MVC 3.0でJSONP専用ActionResultを確立する
コードは次のとおりです.
JsonpResultは以下のように簡単に呼び出されます.
AppLogOnのactionパラメータは、上記のjquery$と完全に一致する.ajaxパラメータ一致:
この文書では、シーンを適用します.
あなたの開発チームがあるグループ会社のために情報管理システムを開発したいと仮定すると、現在最も重要な開発は受注システムと内部OAシステムです.この2つのシステムが同じデータベースを使用することを前提としています.ただ2つの異なるMVC 3.0 Webプロジェクト.つまり、同じIIS上に2つの仮想ディレクトリが配置されます.WCF、WebServiceなどのテクノロジーを使用せずにドメイン間ログインを実現することを目標としています.すなわち,ユーザが同じアカウントで受注システムにログインすると,クライアントは直接OAシステムにログインすることができる.OAシステムにユーザー名とパスワードをもう一度入力する必要はありません.逆も成り立つ.
jQuery1.5 JSONP使用:
<
script type
=
"
text/javascript
"
>
2
$(
function
() {
3
var
oAUri
=
"
@ViewBag.OAVRUri
"
;
4
var
user
=
"
@ViewBag.User
"
;
5
var
pwd
=
"
@ViewBag.PassWord
"
;
6
7
$.ajax({
8
type:
"
GET
"
,
9
url: String.format(
'
{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?
'
, oAUri, user, pwd),
10
cache:
false
,
11
error:
function
() {
12
alert(
"
, .
"
);
13
},
14
dataType:
"
jsonp
"
,
15
jsonp:
'
callback
'
,
16
success:
function
(result) {
17
18
}
19
});
20
21
});
22
<
/
script>
MVC 3.0でJSONP専用ActionResultを確立する
コードは次のとおりです.
1
public
class
JsonpResult
<
T
>
: ActionResult
2
{
3
public
T Obj {
get
;
set
; }
4
public
string
CallbackName {
get
;
set
; }
5
6
public
JsonpResult(T obj,
string
callback)
7
{
8
this
.Obj
=
obj;
9
this
.CallbackName
=
callback;
10
}
11
12
public
override
void
ExecuteResult(ControllerContext context)
13
{
14
var js
=
new
System.Web.Script.Serialization.JavaScriptSerializer();
15
var jsonp
=
this
.CallbackName
+
"
(
"
+
js.Serialize(
this
.Obj)
+
"
)
"
;
16
17
context.HttpContext.Response.ContentType
=
"
application/json
"
;
18
context.HttpContext.Response.Write(jsonp);
19
}
20
}
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。