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 emailvar email = user.Email;…………
}
復制代碼

?

我們期望將函數改造成:

復制代碼
public ActionResult Index(UserAccount sessionUser)
{//send emailvar 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.

轉載于:https://www.cnblogs.com/webenh/p/7691744.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280104.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++回聲服務器_4-UDP connect版本客戶端

針對UDP套接字調用connect函數不會與對方UDP套接字建立連接,只是向UDP套接字注冊目標IP和端口信息。 修改客戶端代碼 服務器代碼不需要修改,只需修改客戶端代碼。調用connect函數之后,可以調用write函數和read函數來發送、接收數據&#xff0…

如何在路由綁定中使用 IParsable

IParsable 是 .Net 7 中新增的接口,它可以將字符串轉換為對應的實體。在 Controller 的 Route 綁定中可以使用 IParsable 來綁定復雜的實體。實驗背景 假設有一個需要將 route "report/{month}-{day}" 綁定到 MyDate 對象上的場景。在 .Net 7 之前&#x…

火狐 新增標簽 一直加載_在Firefox的新標簽頁中加載最后標簽頁的URL

火狐 新增標簽 一直加載Yeah, you’re pretty sure that you’re the master of all things Firefox. I mean, why else would you be reading this article? So, we’ve got to ask, have you ever seen this one before? 是的,您很確定自己是Firefox的所有人。 …

ptyhon【遞歸練習】

轉載于:https://www.cnblogs.com/LTEF/p/9187287.html

Iterator 和 for...of 循環

本系列屬于阮一峰老師所著的ECMAScript 6 入門學習筆記 Iterator(遍歷器) JavaScript表示“集合”的數據結構,除了Array 、Object ,ES6又新增了Map 和Set 。 遍歷器(Iterator)是一種統一的接口機制,用來處理所有不同的…

JAVA常量

2019獨角獸企業重金招聘Python工程師標準>>> 常量就是一個固定值。它們不需要計算,直接代表相應的值。 常量指不能改變的量。 在Java中用final標志,聲明方式和變量類似: final double PI 3.1415927; 雖然常量名也可以用小寫&…

基于Docker托管Azure DevOps代理

Azure DevOps非常好用,但是為代理準備單獨的服務器經常會顯得性價比不高:配置低了,前端構建時會教會你做人,配置太高又有點浪費資源,代理數量少了各團隊構建要打架。對于既想享受DevOps的美妙之處但是資源捉襟見肘的小…

微軟 word轉換pdf_如何將行轉換為Microsoft Word表中的列

微軟 word轉換pdfYou’ve created a table in Word and started to enter your data. Then, you realize that the table should be transposed, meaning the rows should be columns and vice versa. Rather than recreating the table and manually entering the data again,…

pycharm中如何正確配置pyqt5

網上看了幾個文章,不成功。這樣做才是正確姿勢: /Users/mac/anaconda3/bin/Designer.app /Users/mac/anaconda3/bin$ProjectFileDir$ pyuic5 $FileName$ -o $FileNameWithoutExtension$.py $ProjectFileDir$ 其它細節懶得說。 轉載于:https://www.cnblog…

JS常用的設計模式

持續更新JS常用的設計模式以及應用場景*以下內容為個人簡單理解以及摘抄部分網上demo組成,有錯誤請在下方評論指出?*# 何謂設計模式沒必要被高大上的名詞所嚇倒,日常coding中或許一個不了解各種設計模式的程序員可能自己其實已經用到了很多拋開官方的定…

如何在Photoshop中制作雙曝光圖像

Double exposure images are popular at the moment. Taylor Swift’s Style music video and the True Detective opening theme both used the effect. It’s a technique where two separate photos—typically a portrait and a landscape—are blended together into one …

記一次.NET 某安全生產系統 CPU爆高分析

一:背景 1.講故事今天是🐏的第四天,頭終于不巨疼了,寫文章已經沒什么問題,趕緊爬起來寫。這個月初有位朋友找到我,說他的程序出現了CPU爆高,讓我幫忙看下怎么回事,簡單分析了下有兩點…

JDBC 學習筆記(一)—— JDBC 基礎

1. 什么是 JDBC JDBC,Java Database Connectivity(Java 數據庫連接),是一組執行 SQL 語句的 Java API。 JDBC,是 Java SE(Java Platform, Standard Edition)標準的一部分。 Java 程序可以通過 J…

JavaScript享元模式

JavaScript享元模式 通過兩個例子的對比來凸顯享元模式的特點:享元模式是一個為了提高性能(空間復雜度)的設計模式,享元模式可以避免大量非常相似類的開銷。 第一實例,沒有使用享元模式,計算所花費的時間和空間使用程度。 要求為&…

mac屏幕截圖_如何在Mac上拍攝屏幕截圖

mac屏幕截圖On a Mac, you can take screenshots with a few quick keyboard shortcuts. But Mac OS X also includes more powerful screenshot tools, too. Here are some of the many ways you can get a screenshot on OS X. 在Mac上,您可以使用一些快速的鍵盤快…

實現 .Net 7 下的數據庫定時檢查

在軟件開發過程中,有時候我們需要定時地檢查數據庫中的數據,并在發現新增數據時觸發一個動作。為了實現這個需求,我們在 .Net 7 下進行一次簡單的演示。PeriodicTimer .Net 6 中新增了 PeriodicTimer 這個類,它可以用來創建一個定…

新手AS常見問題集錦

開發環境 以前開發android的時候可以使用eclipse,雖然現在也能使用eclipse,但是google已經不再支持使用eclipse開發android了。因為google有了自己的IDE---android studio,這個IDE我自己認為安裝的時候比較方便,唯一的缺點就是在下…

js進階 11-6 jquery如何獲取和設置元素的寬高(jquery多方法)

js進階 11-6 jquery如何獲取和設置元素的寬高(jquery多方法) 一、總結 一句話總結:jquery里面多是方法啊,比如jquery對象的寬高。所以取值是方法,賦值就是方法里面帶參數。 1、百度富文本編輯器ueditor如何設置寬高&a…

SparseArray代替HashMap

相信大家都明白,手機軟件的開發不同于PC軟件的開發,因為手機性能相對有限,內存也有限,所謂“寸土寸金”,可能稍有不慎,就會導致性能的明顯降低。Android為了方便開發者,特意在android.util這個包…

也許你曾經讀過他的書

我們愿用“能理能文、才華多元”來形容他。因為熱愛編程和游戲,所以他將愛好變成了職業,并在這條路上持續奔跑;因為熱愛分享,所以他堅持在博客上分享技術觀點并出版了關于 Azure、微軟游戲棧的書籍;因為熱愛挑戰&#…