程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 如何在ASP.NET MVC 3 中利用Jsonp跨域訪問

如何在ASP.NET MVC 3 中利用Jsonp跨域訪問

編輯:關於ASP.NET

在信息系統開發的時,根據相關業務邏輯難免會多系統之間互相登錄。一般情況下我們需要在多系統之間使用多個用戶名和密碼。這樣客戶就需要在多個系統之間重復登陸。每次登錄都需要輸入用戶名和密碼。最近比較流行的就是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 () {
 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) {
18                }
           });
21        });
22</script>

在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.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)
{
  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。

作者信息:cnblogs 宋坤明

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved