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 、服務器
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解