乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在ASP.NET MVC3 中利用JSONP跨域登錄WEB系統(tǒng)

       kittywei 2012-04-20

      在信息系統(tǒng)開(kāi)發(fā)的時(shí),根據(jù)相關(guān)業(yè)務(wù)邏輯難免會(huì)多系統(tǒng)之間互相登錄。一般情況下我們需要在多系統(tǒng)之間使用多個(gè)用戶名和密碼。這樣客戶就需要在多個(gè)系統(tǒng)之間重復(fù)登陸。每次登錄都需要輸入用戶名和密碼。最近比較流行的就是OAuth。新浪微博這個(gè)開(kāi)放系統(tǒng)做的就很好。但OAuth并非本文討論范疇。這里主要討論jQuery1.5 jsonp 在Asp.net MVC3 中的應(yīng)用。

        本文應(yīng)用場(chǎng)景:

        假設(shè)您的開(kāi)發(fā)團(tuán)隊(duì)欲為某集團(tuán)公司開(kāi)發(fā)一整套信息管理系統(tǒng),目前首要開(kāi)發(fā)的就是一套訂單系統(tǒng)和一套內(nèi)部OA系統(tǒng)。前提是這兩套系統(tǒng)使用同一套數(shù)據(jù)庫(kù)。只是兩個(gè)不同的MVC3.0 Web項(xiàng)目。也就是說(shuō)會(huì)在同一個(gè)IIS上部署兩個(gè)虛擬目錄。  我們的目標(biāo)是在不使用WCF、WebService 等技術(shù)實(shí)現(xiàn)跨域登錄。也就是說(shuō)用戶用同一個(gè)賬號(hào)登錄了訂單系統(tǒng),那么客戶就可以直接登錄OA系統(tǒng)。而不需要在OA系統(tǒng)上再輸入一次用戶名和密碼。反之亦成立。

        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(
      "程序出錯(cuò),請(qǐng)聯(lián)系管理員.");
      },
      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 簡(jiǎn)單調(diào)用如下:

      public ActionResult AppLogOn(string UserName, string PassWord, string callback)
      {
      return new JsonpResult<object>(new { success = true, rankName = rankName }, callback);
      }

        AppLogOn的action參數(shù)完全和上文中的jquery $.ajax 參數(shù)一致:

      url: String.format('{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?', oAUri, user, pwd)

        小結(jié):

        Jsonp的服務(wù)器端的原理其實(shí)就是回調(diào)一個(gè)js函數(shù)名(這里是callback參數(shù))將該參數(shù)傳給服務(wù)端,接著再由服務(wù)器端執(zhí)行這個(gè)callback js函數(shù), 同時(shí)附上該js函數(shù)的參數(shù)。比如上文的C#代碼: var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";還有一點(diǎn)我們要注意的就是安全隱患問(wèn)題:在使用jsonp由于涉及到跨域,需要考慮到對(duì)方站點(diǎn)或者對(duì)方系統(tǒng)的安全性問(wèn)題。應(yīng)當(dāng)避免安全隱患,不能濫用jsonp。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多