亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET Web API Model-ValueProvider

2019-11-17 01:45:57
字體:
來源:轉載
供稿:網友

asp.net Web API Model-ValuePRovider

ASP.NET Web API Model-ValueProvider

前言

前面一篇講解了Model元數據,Model元數據是在Model綁定中很重要的一部分,只是Model綁定中涉及的知識點比較多,對于ASP.NET MVC框架來說ASP.NET Web API框架中在Model綁定部分又新增了參數綁定這么一個機制,這些內容都會在后面的篇幅中說明,前面的這些篇幅都是講解理論上的知識也沒有涉及到示例的演示,這個大家不用急在最后Model部分的基礎知識講解完之后我會把前面所講的全部串聯起來,而今天這個篇幅給大家帶來的就是在Model綁定中起到至關重要的一個環節,大家這個不用去管什么Model綁定,而是單純的去了解ValueProvider這一系列的對象模型,因為在沒有結合前后知識點串聯起來之前,我們都不知道ValueProvider是在哪執行的。所以我們還是老老實實了解一下ValueProvider相關的對象吧。

Model-ValueProvider

圖1

IValueProvider接口類型--ValueProvider行為約束

首先我們看一下圖1中右邊的部分,起頭的就是一個IValueProvider接口類型,我們就來看一下接口的定義:

示例代碼1-1

    public interface IValueProvider    {        bool ContainsPrefix(string prefix);        ValueProviderResult GetValue(string key);    }

我們在代碼1-1中看到,IValueProvider接口中定義了兩個方法,一個是ContainsPrefix()方法,接收string類型的參數并且返回的是bool值類型,這個方法表示的就是根據指定的前綴值查看當前的ValueProvider中是否存在這個前綴值,這個下面會有示例稍后再說,然后就是GetValue()方法,是根據執行的鍵值返回當中的對應的值,從這里一看我們就大概能猜到這個ValueProvider應該是類似于鍵值隊一樣的類型,而返回的結果被封裝在了ValueProviderResult類型當中,這個類型稍后會有說明。在IValueProvider接口約束好ValueProvider值提供程序的行為后,我們應該就來看一看ValueProvider值提供程序的基礎結構了。不過呢在此之前我們還是要根據圖1中所示的那樣,先來看一下IEnumerableValueProvider接口類型的定義,這個接口主要負責什么呢?

IEnumerableValueProvider接口類型-ValueProvider行為約束

示例代碼1-2

    public interface IEnumerableValueProvider : IValueProvider    {        IDictionary<string, string> GetKeysFromPrefix(string prefix);    }

從代碼1-2中可以很清楚明了的看到IEnumerableValueProvider接口類型的職責很簡單,就是對指定的前綴值進行檢索,并且最后以鍵值隊的形式返回,這個在下面會有示例詳細說明。

NameValuePairsValueProvider類型-ValueProvider基礎結構

示例代碼1-3

    public class NameValuePairsValueProvider : IEnumerableValueProvider, IValueProvider    {        public NameValuePairsValueProvider(Func<IEnumerable<KeyValuePair<string, string>>> valuesFactory, CultureInfo culture);        public NameValuePairsValueProvider(IEnumerable<KeyValuePair<string, string>> values, CultureInfo culture);        public virtual bool ContainsPrefix(string prefix);        public virtual IDictionary<string, string> GetKeysFromPrefix(string prefix);        public virtual ValueProviderResult GetValue(string key);    }

在代碼1-3中我們看到NameValuePairsValueProvider類型的定義,首先就說說它的構造函數吧,兩個構造函數的區別在于第一個是Func<IEnumerable<KeyValuePair<string, string>>>類型的構造函數參數,第二個是IEnumerable<KeyValuePair<string, string>>類型的構造函數參數,第二個構造函數的首個參數類型實際就是第一個構造函數首個參數的返回類型,這里大家都看得到,其實在內部實現,也是這樣的聲明第一個構造函數是沒什么的,聲明第二個構造函數的時候其實就把參數再次封裝為委托。

對于KeyValuePair<T,U>類型可以理解為鍵值隊的子項,在它的類型中只有一個鍵值對應一個值只有一項就是它本身。

至于剩下的三個方法我們還是靠簡單的示例來說明一下。

示例代碼1-4

    public class ValueProviderCaseController : ApiController    {        public string Get()        {                        KeyValuePair<string,string>[] dictionary=new KeyValuePair<string,string>[]            {                new KeyValuePair<string,string>("EmployeesInfo.Name","Jinyuan"),                new KeyValuePair<string,string>("EmployeesInfo.Age","24"),                new KeyValuePair<string,string>("EmployeesInfo.Sex","男"),                new KeyValuePair<string,string>("EmployeesInfo.AddressInfo.AddressInfo","南京市"),                new KeyValuePair<string,string>("EmployeesInfo.AddressInfo.Z

我們來看代碼1-4,首先我在Get()方法中定義了一個KeyValuePair<string,string>[]類型,為了能夠實例化NameValuePairsValueProvider類型,在此之后大家可以看到我調用了一個我自定義的NameValuePairsPrefixAnalysis()方法,并且在其中使用NameValuePairsValueProvider類型的實例調用了GetKeysFromPrefix()方法,也就是代碼1-2所約束的那個行為。這個時候我們先來看一下表1.

表1

Key

Value

EmployeesInfo.Name

Jinyuan

EmployeesInfo.Age

24

EmployeesInfo.Sex

EmployeesInfo.AddressInfo.AddressInfo

南京市

EmployeesInfo.AddressInfo.ZipCode

210000

表1所表示的就是初始數據源,也就是我們定義的KeyValuePair<string,string>[]類型的鍵、值示意表。

然而在我們使用NameValuePairsValueProvider類型的實例已” EmployeesInfo”作為前綴調用了GetKeysFromPrefix()方法后返回的IDictionary<string, string>類型的值如表2.

表2

Key

Value

Name

EmployeesInfo.Name

Age

EmployeesInfo.Age

Sex

EmployeesInfo.Sex

AddressInfo

EmployeesInfo.AddressInfo

這里的表2值只是第一層的關系值。

在此之后我們輸出的當前的所要檢索的前綴值以及檢索過后的值,并且會遍歷表2里的Value值作為前綴值再次的對數據源進行前綴檢索,如果沒有了則說明已經沒有可檢索的了。

并且使用NameValuePairsValueProvider類型實例調用的GetValue()方法根據最后已經檢索不出來有后綴的前綴值,也就是原始數據源當中的Key值了。

最后我們看一下結果。

圖2

在客戶端我們獲取到了值,當然這里只是演示示例,值提供程序提供的值方向反了。

然后我們可以在服務端看到檢索的記錄,可以明確的看到有兩層的結構在其中。有興趣的朋友深入一下看下檢索的具體實現方式。

QueryStringValueProvider類型-ValueProvider特定結構

示例代碼1-5

    public class QueryStringValueProvider : NameValuePairsValueProvider    {        public QueryStringValueProvider(HttpActionContext actionContext, CultureInfo culture)            : base(func, culture)        {            Func<IEnumerable<KeyValuePair<string, string>>> func = null;            if (func == null)            {                func = () => actionContext.ControllerContext.Request.GetQueryNameValuePairs();            }        }    }

從代碼1-5中可以看到在QueryStringValueProvider類型初始化的時候構造函數中的執行,把從請求查詢字符串作為原始數據來源封裝為委托類型,然后調用基類的構造函數。

RouteDataValueProvider類型-

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲aa在线观看| 国产一区二区在线播放| 久久久精品视频成人| 欧美成人亚洲成人日韩成人| 国产乱肥老妇国产一区二| 尤物yw午夜国产精品视频明星| 中文在线资源观看视频网站免费不卡| 亚洲伊人第一页| 国产精品视频xxx| 国产日韩欧美综合| 国产亚洲精品久久久优势| 中文字幕日韩电影| 亚洲自拍欧美另类| 欧美极品少妇xxxxⅹ喷水| 国产精品观看在线亚洲人成网| 亚洲午夜国产成人av电影男同| 国外成人在线播放| 91精品国产网站| 欧美性猛交xxxx免费看久久久| 2021久久精品国产99国产精品| 色爱精品视频一区| 成人有码在线视频| 欧美性视频网站| 精品视频久久久| 亚洲欧美在线免费观看| 亚洲午夜av电影| 91精品国产高清久久久久久91| 自拍偷拍亚洲欧美| 精品亚洲一区二区三区在线观看| 国产91色在线播放| 精品久久中文字幕久久av| 久久这里只有精品99| 欧美国产精品va在线观看| 国产综合久久久久久| 亚洲日韩欧美视频一区| 国产午夜精品视频免费不卡69堂| 激情成人中文字幕| 亚洲精品日韩欧美| 伊人男人综合视频网| 日韩电影免费观看中文字幕| 午夜精品福利在线观看| 欧美自拍视频在线| 成人av番号网| 国产日本欧美一区二区三区| 久久视频在线播放| 国产日产久久高清欧美一区| 亚洲精美色品网站| 中文综合在线观看| 亚洲最大激情中文字幕| 亚洲精品理论电影| 久久精品2019中文字幕| 日韩在线欧美在线| 奇门遁甲1982国语版免费观看高清| 亚洲欧美日韩一区二区在线| 欧美精品激情在线| 亚洲欧美中文在线视频| 国产精品直播网红| 国产做受高潮69| 视频直播国产精品| 久久久人成影片一区二区三区观看| 精品久久久久久国产91| 91精品国产自产在线| 久久久噜久噜久久综合| 欧美xxxx做受欧美| 最新国产精品亚洲| 精品综合久久久久久97| 欧美性猛交xxxx乱大交3| 久久这里只有精品视频首页| 欧美性猛交xxxx免费看| 色偷偷av一区二区三区| 久久97精品久久久久久久不卡| 日本免费久久高清视频| 日韩理论片久久| 久久精品99久久久久久久久| 日韩av影片在线观看| 国产精品美乳一区二区免费| 欧洲午夜精品久久久| 久久综合久中文字幕青草| 成人精品一区二区三区| 国产成人精品网站| 91免费欧美精品| 日韩av在线资源| 欧美在线欧美在线| 成人h视频在线观看播放| 在线视频日本亚洲性| 91久久精品国产91性色| 中文日韩电影网站| 综合av色偷偷网| 日韩资源在线观看| 欧美精品免费在线观看| 亚洲第一页自拍| 国产亚洲日本欧美韩国| 国产美女久久精品香蕉69| 欧美人与性动交a欧美精品| 亚洲欧美日本精品| 欧美自拍视频在线观看| 疯狂做受xxxx欧美肥白少妇| 国产v综合ⅴ日韩v欧美大片| 久久久久久久电影一区| 亚洲r级在线观看| 久久久久久高潮国产精品视| 亚洲精品久久久久久久久久久久久| 日韩高清电影免费观看完整| 中文字幕久热精品在线视频| 久久久国产精品免费| 日本亚洲精品在线观看| 成人妇女淫片aaaa视频| 在线免费看av不卡| 国产精品久久久久久久久久免费| 九九视频直播综合网| 国产成人精品免费视频| 在线观看欧美视频| 伊人亚洲福利一区二区三区| www日韩中文字幕在线看| 91tv亚洲精品香蕉国产一区7ujn| 日韩精品久久久久| 亚洲一区二区三区乱码aⅴ| 午夜精品久久久久久久白皮肤| 成人国内精品久久久久一区| 亚洲专区中文字幕| 久久久久九九九九| 日韩美女免费线视频| 日韩av最新在线观看| 成人福利视频在线观看| 久久6精品影院| 国产精品久久久久久久久久久久| 国产成人久久久精品一区| 欧美福利视频在线| 精品欧美国产一区二区三区| 欧美尺度大的性做爰视频| 亚洲欧美日韩国产中文| 亚洲国产小视频在线观看| 久久久久国产精品免费网站| 亚洲国产精品人久久电影| 2019中文字幕全在线观看| 日韩在线播放av| 国产精品视频1区| 久久精品久久久久| 日韩精品中文字幕在线观看| 成人av资源在线播放| 亚洲精品v天堂中文字幕| 国产一区二区丝袜| 91精品免费看| 欧美精品久久久久a| 欧美激情国产精品| 国产日韩欧美在线| 中文字幕在线看视频国产欧美在线看完整| 久久免费国产精品1| 久久精品国产欧美激情| 日韩一区av在线| 亚洲精品www久久久久久广东| 色在人av网站天堂精品| 日韩av综合中文字幕| 欧美亚洲国产成人精品| 国产精品免费观看在线| 国产精品久久久久久亚洲影视| 欧美日韩精品二区| 欧美性高潮床叫视频| 日韩最新免费不卡| 亚洲级视频在线观看免费1级| 国产成人午夜视频网址| 国产精品18久久久久久麻辣| 国产精品极品美女在线观看免费| 国产香蕉97碰碰久久人人|