Asp.net MVC使用Model Binding解除Session, Cookie等依賴


上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依賴"介紹了如何使用Filter來解除對於Session, Cookie的依賴。
其實這個也可以通過Model Binding來達到同樣的效果。

什么是Model Binding?

Model Binding的作用就是將Request請求中包含的散亂參數,根據接受請求的Action方法的參數列表,自動智能地構建這些參數的過程。

 modelbinding

問題分析

常見的對於Session依賴的代碼:

public ActionResult Index()
{
     var user = Session[“UserAccuont”];//從Session中獲取當前登錄用戶的信息
     //send email
     var email = user.Email;
     …………
}

 

我們期望將函數改造成:

public ActionResult Index(UserAccount sessionUser)
{
     //send email
     var email = sessionUser.Email;
     …………
}

讓Index action方法不用在方法內訪問Session, 從而解除對於Session的依賴。
如果MVC能夠智能的構造參數sessionUser, 從session取的數據,就能夠解決我們的問題了。這就需要我們的Model Binding出場了。

自定義Model Binding

繼承接口IModelBinder, 實現BindModel方法。
這個UserAccountModelBinder的作用就是從Session中取得UserAccount.

public class UserAccountModelBinder : IModelBinder
   {
       public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
       {
           if(controllerContext.HttpContext.Session["UserAccuont"] != null)
           {
               return controllerContext.HttpContext.Session["UserAccuont"];
           }
           return null;
       }
   }

 接下來,我們要為這個ModelBinder,添加到MVC的Model Binding設置中,使得它能夠在MVC的生命周期中起作用。
在Global.asax.cs文件的Application_Start()方法中,添加UserAccountModelBinder

protected void Application_Start()
{

    ………

    //凡是UserAccount類型的參數,都會使用UserAccountModelBinder來處理,也就是會從Session中取值

    ModelBinders.Binders.Add(typeof(UserAccount), new UserAccountModelBinder ());

}

 上面就是全部的Model Binding解決問題的過程,希望能夠幫助大家更好地理解MVC中的Model Binding.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM