欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

ASP.NETWebAPIModel-ValueProvider

ASP.NET Web API Model-ValueProvider

前言

公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出柘城免費(fèi)做網(wǎng)站回饋大家。

前面一篇講解了Model元數(shù)據(jù),Model元數(shù)據(jù)是在Model綁定中很重要的一部分,只是Model綁定中涉及的知識(shí)點(diǎn)比較多,對(duì)于ASP.NET MVC框架來說ASP.NET Web API框架中在Model綁定部分又新增了參數(shù)綁定這么一個(gè)機(jī)制,這些內(nèi)容都會(huì)在后面的篇幅中說明,前面的這些篇幅都是講解理論上的知識(shí)也沒有涉及到示例的演示,這個(gè)大家不用急在最后Model部分的基礎(chǔ)知識(shí)講解完之后我會(huì)把前面所講的全部串聯(lián)起來,而今天這個(gè)篇幅給大家?guī)淼木褪窃贛odel綁定中起到至關(guān)重要的一個(gè)環(huán)節(jié),大家這個(gè)不用去管什么Model綁定,而是單純的去了解ValueProvider這一系列的對(duì)象模型,因?yàn)樵跊]有結(jié)合前后知識(shí)點(diǎn)串聯(lián)起來之前,我們都不知道ValueProvider是在哪執(zhí)行的。所以我們還是老老實(shí)實(shí)了解一下ValueProvider相關(guān)的對(duì)象吧。

 

Model-ValueProvider

圖1

ASP.NET Web API Model-ValueProvider

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

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

示例代碼1-1

   publicinterfaceIValueProvider
   {
        boolContainsPrefix(stringprefix);
        ValueProviderResultGetValue(stringkey);
   }

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

IEnumerableValueProvider接口類型-ValueProvider行為約束

示例代碼1-2

   publicinterfaceIEnumerableValueProvider : IValueProvider
   {
        IDictionary<string, string>GetKeysFromPrefix(stringprefix);
   }

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

NameValuePairsValueProvider類型-ValueProvider基礎(chǔ)結(jié)構(gòu)

示例代碼1-3

   publicclassNameValuePairsValueProvider : IEnumerableValueProvider, IValueProvider
   {
        publicNameValuePairsValueProvider(Func<IEnumerable<KeyValuePair<string, string>>>valuesFactory, CultureInfoculture);
        publicNameValuePairsValueProvider(IEnumerable<KeyValuePair<string, string>>values, CultureInfoculture);
 
        publicvirtualboolContainsPrefix(stringprefix);
        publicvirtualIDictionary<string, string>GetKeysFromPrefix(stringprefix);
        publicvirtualValueProviderResultGetValue(stringkey);
    }

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

對(duì)于KeyValuePair<T,U>類型可以理解為鍵值隊(duì)的子項(xiàng),在它的類型中只有一個(gè)鍵值對(duì)應(yīng)一個(gè)值只有一項(xiàng)就是它本身。

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

示例代碼1-4

    publicclassValueProviderCaseController : ApiController
   {
        publicstringGet()
        {
            
            KeyValuePair<string,string>[] dictionary=newKeyValuePair<string,string>[]
            {
                newKeyValuePair<string,string>("EmployeesInfo.Name","Jinyuan"),
                newKeyValuePair<string,string>("EmployeesInfo.Age","24"),
                newKeyValuePair<string,string>("EmployeesInfo.Sex","男"),
                newKeyValuePair<string,string>("EmployeesInfo.AddressInfo.AddressInfo","南京市"),
                newKeyValuePair<string,string>("EmployeesInfo.AddressInfo.ZipCode","210000")
            };
            NameValuePairsValueProvidernameValuePairsValueProvider=newNameValuePairsValueProvider(dictionary,null);
            StringBuilderstrBuilder=newStringBuilder();
            NameValuePairsPrefixAnalysis(strBuilder, nameValuePairsValueProvider, "EmployeesInfo");
            returnstrBuilder.ToString();
        }
 
        privatevoidNameValuePairsPrefixAnalysis(StringBuilderstringbuilder, NameValuePairsValueProvidernamevaluepairs,stringprefix)
        {
            IDictionary<string, string>dictionarys=namevaluepairs.GetKeysFromPrefix(prefix);
            
            if (dictionarys.Count>0)
            {
                Console.WriteLine(prefix+"為前綴的數(shù)據(jù)源Key值檢索……");
                foreach (varitemindictionarys)
                {
                    Console.WriteLine("Key:"+item.Key+" Value:"+item.Value);
                }
                foreach (KeyValuePair<string, string>keyvalueindictionarys)
                {
                    NameValuePairsPrefixAnalysis(stringbuilder, namevaluepairs, keyvalue.Value);
                }
            }
            else
            {
                stringbuilder.AppendLine(prefix+":"+namevaluepairs.GetValue(prefix).RawValue.ToString());
            }
        }
   }

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

 

表1

Key

Value

EmployeesInfo.Name

Jinyuan

EmployeesInfo.Age

24

EmployeesInfo.Sex

EmployeesInfo.AddressInfo.AddressInfo

南京市

EmployeesInfo.AddressInfo.ZipCode

210000

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

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

 

表2

Key

Value

Name

EmployeesInfo.Name

Age

EmployeesInfo.Age

Sex

EmployeesInfo.Sex

AddressInfo

EmployeesInfo.AddressInfo

這里的表2值只是第一層的關(guān)系值。

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

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

最后我們看一下結(jié)果。

圖2

ASP.NET Web API Model-ValueProvider

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

然后我們可以在服務(wù)端看到檢索的記錄,可以明確的看到有兩層的結(jié)構(gòu)在其中。有興趣的朋友深入一下看下檢索的具體實(shí)現(xiàn)方式。

 

QueryStringValueProvider類型-ValueProvider特定結(jié)構(gòu)

示例代碼1-5

   publicclassQueryStringValueProvider : NameValuePairsValueProvider
   {
        publicQueryStringValueProvider(HttpActionContextactionContext, CultureInfoculture)
            : base(func, culture)
        {
            Func<IEnumerable<KeyValuePair<string, string>>>func=null;
            if (func==null)
            {
                func= () =>actionContext.ControllerContext.Request.GetQueryNameValuePairs();
            }
        }
   }

從代碼1-5中可以看到在QueryStringValueProvider類型初始化的時(shí)候構(gòu)造函數(shù)中的執(zhí)行,把從請(qǐng)求查詢字符串作為原始數(shù)據(jù)來源封裝為委托類型,然后調(diào)用基類的構(gòu)造函數(shù)。

RouteDataValueProvider類型-ValueProvider特定結(jié)構(gòu)

示例代碼1-6

   publiccla***outeDataValueProvider : NameValuePairsValueProvider
   {
        publicRouteDataValueProvider(HttpActionContextactionContext, CultureInfoculture)
            : base(func, culture)
        {
            Func<IEnumerable<KeyValuePair<string, string>>>func=null;
            if (func==null)
            {
                func= () =>GetRoutes(actionContext.ControllerContext.RouteData);
            }
        }
   }

同上面1-5一樣的道理,這里使用了HttpRouteData中的Values值作為原始數(shù)據(jù)源。

 

還有圖1中的左邊部分會(huì)在后面的篇幅中講解,在這里講不適合,會(huì)感覺不連貫,雖然看完本篇不知道這個(gè)起到了什么作用也不知道怎么去使用,感覺被掐住了脖子一樣的難受,但是后面我會(huì)把前面所講的內(nèi)容全部串聯(lián)起來做一個(gè)演示,所示這是基礎(chǔ)部分的知識(shí),就是一個(gè)鋪墊。

標(biāo)題名稱:ASP.NETWebAPIModel-ValueProvider
本文來源:http://aaarwkj.com/article8/peipip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、搜索引擎優(yōu)化Google、網(wǎng)站改版、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
五月色婷婷六月色丁香| 免费看欧美粗又大爽老| 可以看黄片的在线观看 | 亚洲奇米精品一区二区| 字幕日本欧美一区二区| 久久国产精品午夜视频| av中文字幕一二三区| 国产在线自拍一区二区| 毛片成人18毛片免费看| 色婷婷av一区二区三区张| 亚洲激情视频在线视频| 欧美日韩国产这里只有精品| 国产精品黄色片在线观看| 国产精品推荐在线观看| 国产一区二区高清在线| avav男人天堂亚洲天堂| 日韩最新人妻在线不卡| 欧美美女福利午夜视频| 久久香蕉国产线看观看av| 国产一区二区三区婷婷 | 欧美日韩一区二区三区四区在线观看 | 亚洲精品中文字幕乱码三区91| 日本女优高清不卡一二三四区| 超碰91人人在线青青草| 久久精品一区欧美成人| 色哟哟视频在线免费观看| 亚洲中文有码在线播放| 日韩女同性一区二区三区| 校花出白浆视频一区二区三区| 在线观看高清国产黄色片| 九色国产一区二区三区| 精品日韩欧美精品日韩| 99热免费精品在线观看| 国产一区二区欧美精品| 在线播放欧美视频91| 美国一级二级三级黄片| 亚洲不卡在线免费av| 91日本在线免费观看视频| 国产三级三级三级免费看| 传媒在线免费观看视频| 日韩不卡在线免费播放|