精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ASP.NET MVC單元測(cè)試:HttpContext類的Path屬性解惑

開(kāi)發(fā) 后端
HttpContext類中有各種千奇百怪的Path屬性,很難掌握。本文談了一些對(duì)于HttpContext類Path屬性的一些理解,以便更好的進(jìn)行單元測(cè)試。

有關(guān)HttpContext類的Path屬性問(wèn)題描述

前一段時(shí)間有朋友在郵件中向我抱怨,說(shuō)他們團(tuán)隊(duì)在使用ASP.NET MVC開(kāi)發(fā)時(shí),在單元測(cè)試的時(shí)候總是遇到一些不那么方便的地方。例如,對(duì)于HttpContext中各種千奇百怪的Path總是無(wú)法掌控。例如某個(gè)功能會(huì)用到HttpContext的Path屬性,有的又要用到RawUrl——有的又會(huì)涉及到HostName。于是在單元測(cè)試的時(shí)候,就可能需要填充Mock對(duì)象的多種Path屬性,而這幾種Path屬性的值,在理論上還有關(guān)系。這其實(shí)還是小事,一個(gè)麻煩的事情在于,如果功能實(shí)現(xiàn)的方式變了,例如原本使用RawUrl屬性,而后來(lái)忽然覺(jué)得應(yīng)該使用CurrentExecutionFilePath比較合適,于是單元測(cè)試就必須跟著改。如此反復(fù),疲于奔命。

就我個(gè)人經(jīng)驗(yàn)看來(lái),這種情況還是蠻常見(jiàn)的,因?yàn)槟承r(shí)候兩種Path屬性的值差不多,看上去都可以正常使用,于是剛開(kāi)始編寫的時(shí)候可能選擇了其中一個(gè)。但是后來(lái)發(fā)現(xiàn),在另一些情況下兩種Path就有區(qū)別了,而且應(yīng)該使用的是另一個(gè)屬性,于是不得不修改,進(jìn)而單元測(cè)試失敗了。于是他問(wèn)我,有沒(méi)有什么好方法來(lái)“完整而可靠地”設(shè)置那些繽繁復(fù)雜的Path屬性。我之前其實(shí)也是根據(jù)需求設(shè)置各種Path屬性,但是這的確不好,最重要的問(wèn)題在于“單元測(cè)試”需要了解太多“被測(cè)試方法”的實(shí)現(xiàn)細(xì)節(jié)了,這種依賴非常的不可靠。雖然這也是Mock對(duì)象被人詬病的特點(diǎn)之一,但是如果我們能夠緩解這個(gè)缺陷自然再好不過(guò)了。

不過(guò)話說(shuō)回來(lái),在“應(yīng)對(duì)”這個(gè)問(wèn)題之前,您要先了解目前的功能是不是真要訪問(wèn)HttpContext中的各種Path。ASP.NET MVC為了提高程序的可測(cè)試性作了很多努力,或者說(shuō),將“關(guān)注點(diǎn)”進(jìn)行了很大程度的分離。在大部分情況下,我們都能夠不去觸及HttpContext,而且我們應(yīng)該盡可能避免這種情況的發(fā)生。例如,對(duì)Controller做單元測(cè)試的時(shí)候直接傳遞參數(shù),為Model Binder做單元測(cè)試的時(shí)候使用ValueProvider。想來(lái)想去,會(huì)直接使用到HttpContext的Path屬性的場(chǎng)景不多,可能自定義Route算是一個(gè)吧,因?yàn)樗墓δ芫褪墙馕鯱RL。

HttpContext類的Path屬性原理

HttpContext的Path屬性都是通過(guò)HttpRequest對(duì)象獲得的。而事實(shí)上ASP.NET中的HttpRequest對(duì)象已經(jīng)為我們提供一種直接通過(guò)URL構(gòu)造的功能:

  1. var request = new HttpRequest(  
  2.     "",                                      /* filename */ 
  3.     "http://www.cnblogs.com/JeffreyZhao/",   /* url */ 
  4.     "hello=world");                          /* querystring */ 

估計(jì)ASP.NET開(kāi)發(fā)團(tuán)隊(duì)也知道URL是個(gè)難辦的問(wèn)題,為我們預(yù)留了這樣一個(gè)構(gòu)造函數(shù)。這時(shí)的request對(duì)象會(huì)預(yù)填了大多數(shù)Path相關(guān)的屬性:

  1. request  
  2. {System.Web.HttpRequest}  
  3.     AcceptTypes: null 
  4.     AnonymousID: null 
  5.     ApplicationPath: null 
  6.     AppRelativeCurrentExecutionFilePath: threw an exception of type 'System.NullReferenceException' 
  7.     Browser: null 
  8.     ClientCertificate: threw an exception of type 'System.NullReferenceException' 
  9.     ContentEncoding: threw an exception of type 'System.NullReferenceException' 
  10.     ContentLength: 0  
  11.     ContentType: "" 
  12.     Cookies: {System.Web.HttpCookieCollection}  
  13.     CurrentExecutionFilePath: "/JeffreyZhao/" 
  14.     FilePath: "/JeffreyZhao/" 
  15.     Files: {System.Web.HttpFileCollection}  
  16.     Filter: {System.Web.HttpInputStreamFilterSource}  
  17.     Form: {}  
  18.     Headers: {}  
  19.     HttpMethod: "GET" 
  20.     InputStream: {System.Web.HttpInputStream}  
  21.     IsAuthenticated: threw an exception of type 'System.NullReferenceException' 
  22.     IsLocal: false 
  23.     IsSecureConnection: false 
  24.     LogonUserIdentity: null 
  25.     Params: {hello=world}  
  26.     Path: "/JeffreyZhao/" 
  27.     PathInfo: "" 
  28.     PhysicalApplicationPath: threw an exception of type 'System.ArgumentNullException' 
  29.     PhysicalPath: "" 
  30.     QueryString: {hello=world}  
  31.     RawUrl: "/JeffreyZhao/?hello=world" 
  32.     RequestType: "GET" 
  33.     ServerVariables: {}  
  34.     TotalBytes: 0  
  35.     Url: {http://www.cnblogs.com/JeffreyZhao/}  
  36.     UrlReferrer: null 
  37.     UserAgent: null 
  38.     UserHostAddress: null 
  39.     UserHostName: null 
  40.     UserLanguages: null 

以上內(nèi)容是從Visual Studio的Immediate Window中看到的,由此可以發(fā)現(xiàn),其中大部分的Path屬性已經(jīng)準(zhǔn)備好了,但是AppRelativeCurrentExecutionFilePath屬性拋出異常(還有兩個(gè)與本地磁盤路徑有關(guān)的Path就忽略了),因?yàn)樗枰囟ǖ奶摂M路徑環(huán)境才能計(jì)算出來(lái)。通過(guò).NET Reflector觀察這個(gè)屬性的實(shí)現(xiàn),會(huì)發(fā)現(xiàn)其中牽涉到的內(nèi)容不是一點(diǎn)兩點(diǎn),幾乎不可能通過(guò)設(shè)置外部環(huán)境的方式來(lái)使其通過(guò)。因此,我們最終還是要通過(guò)Mock框架來(lái)進(jìn)行設(shè)置——反正我們也需要設(shè)置HttpRequest的其它屬性,不是嗎?

  1. var realRequest = new HttpRequest(  
  2.     "",                                      /* filename */ 
  3.     "http://www.cnblogs.com/JeffreyZhao/",   /* url */ 
  4.     "hello=world");                          /* querystring */ 
  5. var mockRequest = new Mock<HttpRequestWrapper>(realRequest) { CallBase = true };  
  6. mockRequest  
  7.     .Setup(r => r.AppRelativeCurrentExecutionFilePath)  
  8.     .Returns("~" + realRequest.CurrentExecutionFilePath);  

這里還是使用Moq框架,而Mock的對(duì)象則是HttpRequestWrapper類型,而不是我們常用的HttpRequestBase類型。HttpRequestWrapper的特點(diǎn)便是可以“塞入”一個(gè)真正的HttpRequest對(duì)象,然后把所有成員都委托給這個(gè)HttpRequest對(duì)象。我們?cè)跇?gòu)建一個(gè)Mock<HttpRequestWrapper>對(duì)象之后,還需要把CallBase屬性設(shè)為true,這樣便可以讓Mock對(duì)象在默認(rèn)情況下直接使用Wrapper的實(shí)現(xiàn)了。

有了Request,我們便可以構(gòu)建一個(gè)HttpContext的Mock對(duì)象:

  1. var mockContext = new Mock<HttpContextBase>();  
  2. mockContext.Setup(c => c.Request).Returns(mockRequest.Object);  

但是,Moq框架有個(gè)限制,那就是如果您指定了這里的Request對(duì)象,再去通過(guò)HttpContext指定Request中的其他屬性,就會(huì)把原來(lái)的HttpRequest對(duì)象給覆蓋。也就是說(shuō),下面的代碼會(huì)讓我們對(duì)HttpRequest做的努力付之東流:

  1. mockContext.Setup(c => c.Request.Form).Returns(new NameValueCollection());  

這樣您會(huì)發(fā)現(xiàn),mockContext.Object.Request下除了Form外的其他屬性都沒(méi)有值了(或拋出異常,視您Mock時(shí)的Behavior是Loose還是Strict而定)。因此,如果我們希望進(jìn)一步修改HttpRequest中屬性的時(shí)候,只能直接使用那個(gè)Mock<HttpRequestWrapper>對(duì)象進(jìn)行設(shè)置。我不清楚其他Mock框架的行為如何,如果您使用的也是Moq框架,可能就只得這么做了。

為了使用方便,我也在測(cè)試項(xiàng)目中準(zhǔn)備了這樣一個(gè)輔助方法:

  1. public static class MockHelper  
  2. {  
  3.     public static Mock<HttpContextBase> MockRequest(string url, out Mock<HttpRequestWrapper> mockRequest)  
  4.     {  
  5.         int index = url.IndexOf('?');  
  6.         string path = index >= 0 ? url.Substring(0, index) : url;  
  7.         string queryString = index >= 0 ? url.Substring(index + 1) : "";  
  8.  
  9.         var realRequest = new HttpRequest("", path, queryString);  
  10.         mockRequest = new Mock<HttpRequestWrapper>(realRequest) { CallBase = true };  
  11.         mockRequest  
  12.             .Setup(r => r.AppRelativeCurrentExecutionFilePath)  
  13.             .Returns("~" + realRequest.CurrentExecutionFilePath);  
  14.  
  15.         var mockContext = new Mock<HttpContextBase>();  
  16.         mockContext.Setup(c => c.Request).Returns(mockRequest.Object);  
  17.         return mockContext;  
  18.     }  
  19. }  
  20.  

于是我們就可以更方便地進(jìn)行相關(guān)的單元測(cè)試。例如,我們“象征性”地測(cè)試一下ASP.NET Routing中內(nèi)置的Route類型:

  1. [Fact]  
  2. public void URL_Capturing_and_Generation()  
  3. {  
  4.     // prepare route  
  5.     Route route = new Route("{controller}/{action}/{id}"null);  
  6.  
  7.     // Mock request  
  8.     string url = "http://www.cnblogs.com/Home/Index/5";  
  9.     Mock<HttpRequestWrapper> mockRequest;  
  10.     var mockContext = MockHelper.MockRequest(url, out mockRequest);  
  11.     mockContext.Setup(c => c.Response.Charset).Returns("utf-8"); // if you need  
  12.  
  13.     // test data capturing  
  14.     RouteData routeData = route.GetRouteData(mockContext.Object);  
  15.     Assert.Equal("Home", routeData.GetRequiredString("controller"));  
  16.     Assert.Equal("Index", routeData.GetRequiredString("action"));  
  17.     Assert.Equal("5", routeData.GetRequiredString("id"));  
  18.  
  19.     // test url generation  
  20.     var hash = new { controller = "Account", action = "List", id = 1};  
  21.     var values = new RouteValueDictionary(hash);  
  22.     var requestContext = new RequestContext(mockContext.Object, routeData);  
  23.     var pathData = route.GetVirtualPath(requestContext, values);  
  24.     Assert.Equal("Account/List/1", pathData.VirtualPath);  
  25. }  
  26.  

具體內(nèi)容就敘述到這里,目前Path相關(guān)的問(wèn)題應(yīng)該已經(jīng)不會(huì)給您造成太大問(wèn)題了。

以上就是對(duì)HttpContext類的Path屬性的問(wèn)題解惑。本文來(lái)自老趙點(diǎn)滴:《在單元測(cè)試時(shí)指定HttpContext的各種Path》

【編輯推薦】

  1. 自定義的ControllerFactory:接口實(shí)現(xiàn),支持Area
  2. ASP.NET Routing之“解析URL”功能詳解
  3. 為ASP.NET MVC應(yīng)用添加自定義路由
  4. 學(xué)習(xí)ASP.NET MVC路由的使用方法
  5. 淺析ASP.NET中的URL Rewrite
責(zé)任編輯:yangsai 來(lái)源: 老趙點(diǎn)滴
相關(guān)推薦

2009-07-24 11:33:12

MVC單元測(cè)試ASP.NET

2009-07-23 16:29:06

ASP.NET單元測(cè)試

2009-06-01 09:13:52

ASP.NET MVCMVC應(yīng)用ASP.NET MVC

2021-04-26 14:25:39

ASP.NET Cor單元測(cè)試

2021-05-11 15:50:28

ASP.NET單元測(cè)試

2009-07-31 12:43:59

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-23 17:07:58

2009-07-28 13:17:09

EnableViewSASP.NET

2009-07-20 15:44:32

ASP.NET MVC

2009-07-22 09:11:02

Action方法ASP.NET MVC

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-08-13 11:44:25

ASP.NET中的多種

2011-09-22 10:58:56

ASP.NET

2009-07-20 12:59:53

ASP.NET MVCASP.NET框架的功
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

无码人妻丰满熟妇精品| 免费观看污网站| 二区在线播放| heyzo一本久久综合| 国产成人亚洲综合91精品| 懂色av蜜臀av粉嫩av永久| 亚洲日本va| 日本韩国欧美国产| 国产美女av一区二区三区| 欧美日韩在线三区| 日本国产中文字幕| 国产一级二级三级在线观看| 国产一区二区免费视频| 日韩美女写真福利在线观看| 小泽玛利亚一区| 蜜桃一区二区| 欧美sm美女调教| 天天干天天av| 日韩成人动漫| 亚洲香肠在线观看| 亚洲精品日韩成人| 无码国产色欲xxxx视频| 国内精品免费**视频| 日本老师69xxx| 国产网站在线看| 婷婷亚洲五月| 在线视频一区二区| 女同毛片一区二区三区| 一区二区中文字幕在线观看| 欧美午夜一区二区| 久久亚洲中文字幕无码| 在线欧美三级| 国产精品妹子av| 欧美一区1区三区3区公司| 精品欧美在线观看| 国产精品99久久久久久宅男| 国产精品一二区| 国产精品自拍第一页| 亚洲激精日韩激精欧美精品| 免费av一区二区| 国产极品美女在线| 欧美wwwww| 在线观看亚洲视频| 色噜噜噜噜噜噜| 狠狠做深爱婷婷综合一区| 亚洲国产精品一区二区久| 午夜性福利视频| 欧美影院在线| 欧美一区二区三区免费视频| 精品亚洲视频在线| 精品国产第一国产综合精品| 777a∨成人精品桃花网| 日韩激情av在线免费观看| 男插女免费视频| 网友自拍视频在线| 中文字幕免费不卡在线| 特级西西444www大精品视频| 国产福利第一视频在线播放| 国产片一区二区| 亚洲 国产 日韩 综合一区| 国产高清在线| 国产精品乱人伦中文| 亚洲春色在线| 欧美jizz18hd性欧美| 亚洲另类中文字| 欧美精品自拍视频| 亚洲最大网站| 欧美专区日韩专区| 久久久精品高清| 一区二区三区视频免费视频观看网站| 日韩精品一区国产麻豆| 欧美做受高潮中文字幕| 婷婷成人在线| 亚洲一区二区久久| 美女网站视频色| 欧美黄色大片网站| …久久精品99久久香蕉国产| 一区二区在线看| av之家在线观看| 激情久久99| 精品久久久久久最新网址| 污片免费在线观看| 国产欧美日韩精品一区二区免费 | 欧美成人一区二区三区电影| 91在线播放观看| 亚洲在线视频| 91精品久久久久久久久中文字幕| 精品久久久免费视频| 99久久综合狠狠综合久久| 日韩精品第一页| www久久日com| 日日夜夜精品一区| 亚洲丝袜精品丝袜在线| 精品国偷自产一区二区三区| 大胆人体一区| 717成人午夜免费福利电影| 制服.丝袜.亚洲.中文.综合懂| 婷婷精品视频| 欧美成人中文字幕在线| 亚洲欧美偷拍一区| 国产精品原创巨作av| 蜜桃导航-精品导航| 精品美女在线观看视频在线观看| 污片在线观看一区二区 | 免费av成人在线| wwwxx欧美| av资源种子在线观看| 亚洲一区在线视频| 日本 片 成人 在线| 久久久久高潮毛片免费全部播放| 日韩在线视频中文字幕| 精品在线播放视频| 韩国一区二区三区视频| 成人手机在线视频| 亚洲毛片aa| 55av亚洲| 日韩精品一区二区三区在线观看 | 久久精品亚洲精品国产欧美| 黄色网zhan| 久久91导航| 亚洲福利视频免费观看| av激情在线观看| 日本强好片久久久久久aaa| 久久精品五月婷婷| 另类视频在线| 欧美一级一级性生活免费录像| 中文字幕在线观看免费高清| 国产人成精品一区二区三| 91精品天堂| 国产cdts系列另类在线观看| 欧美日韩一级黄| 国产1区2区在线观看| 奶水喷射视频一区| 久久精品国产第一区二区三区最新章节| 国产日产一区二区| 911精品国产一区二区在线| 蜜桃av乱码一区二区三区| 美女网站久久| 明星裸体视频一区二区| 中文字幕这里只有精品| 亚洲爱爱爱爱爱| 国产精品无码专区av在线播放| 一区二区在线观看免费视频| 亚久久调教视频| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 国产理论在线| 亚洲国产高潮在线观看| 免看一级a毛片一片成人不卡| 国内精品第一页| 欧美日韩亚洲国产成人| 国产美女精品视频免费播放软件| 俺也去精品视频在线观看| 在线观看日韩一区二区| 国产精品白丝在线| 亚洲欧美日韩一二三区| 欧美a级片一区| 电影午夜精品一区二区三区| av丝袜在线| 日韩国产精品一区| 国产99免费视频| 国产精品视频线看| 亚洲日本黄色片| 中文字幕人成人乱码| 99re在线视频上| 3344国产永久在线观看视频| 亚洲精品国精品久久99热| 国产成人一级片| 国产免费观看久久| 国产乱叫456| 黄色亚洲免费| 日本视频精品一区| 亚洲最大的免费视频网站| 欧美日本高清视频| 同心难改在线观看| 欧美系列在线观看| 国产精品成人免费观看| 成人av片在线观看| 人妻丰满熟妇av无码区app| 手机在线一区二区三区| 91av一区二区三区| 国产高清视频色在线www| 亚洲人成绝费网站色www| 中文字幕在线视频第一页| 亚洲乱码精品一二三四区日韩在线 | 免费毛片在线播放免费| 26uuu精品一区二区三区四区在线| 不卡av免费在线| 亚洲女同中文字幕| 久久精品magnetxturnbtih| 波多野结衣家庭教师| 亚洲网址在线观看| 欧美在线视频免费观看| 里番在线观看网站| 亚洲精品www久久久| 中文字幕一区二区在线视频| 一区二区久久久久久| 国产精品毛片一区二区| 国产剧情在线观看一区二区| www.中文字幕在线| 亚洲激情五月| 日本不卡一区| 国产精品45p| 成人精品在线视频| 欧美性xxx| 欧美国产日韩视频| 日本高清中文字幕在线| 日韩欧美国产综合| 中日韩av在线| 欧美日韩激情小视频| 日本免费网站视频| 26uuu国产一区二区三区| 欧洲成人午夜精品无码区久久| 日韩成人免费电影| 黑人糟蹋人妻hd中文字幕| 欧美片第1页综合| 亚洲永久激情精品| av一区二区在线播放| 精品一卡二卡三卡四卡日本乱码 | 国产自产精品| 久久gogo国模啪啪裸体| 国产欧美精品一区二区三区介绍| 在线日韩影院| 91福利视频网| 成人观看网址| 久久久久久亚洲精品| 欧美大片黄色| 欧美激情videos| fc2ppv国产精品久久| 精品国产一区二区三区久久狼5月| 玖玖综合伊人| 亚洲视频777| 午夜在线视频免费| 亚洲国产日韩一区| 亚洲精品视频91| 日韩一级欧美一级| 国内老熟妇对白hdxxxx| 欧美一区二区三区喷汁尤物| 一起草av在线| 欧美群妇大交群的观看方式| 波多野结衣视频在线观看| 日本福利一区二区| 波多野结衣电车痴汉| 欧洲生活片亚洲生活在线观看| 五月天激情四射| 成人影院在线视频| 亚洲新中文字幕| 国产精品影院在线| 国产一级揄自揄精品视频| 久草福利在线| 丝袜美腿精品国产二区| yw在线观看| 日韩在线免费视频观看| 久热国产在线| 九九热在线精品视频| 欧美男男video| 91成人精品网站| 午夜精品成人av| 国产精品久久久久久av福利软件 | 成人h视频在线观看| 2020最新国产精品| 精品一区二区三区免费毛片| 久久精品亚洲成在人线av网址| 久久亚洲综合网| 国产日产一区| 中文字幕在线中文字幕日亚韩一区| 99国内精品久久久久久久| 中国一级黄色录像| 在线成人h网| 337p粉嫩大胆噜噜噜鲁| 日韩电影在线免费观看| 黄色小视频免费网站| 国产精品18久久久久| 成人免费毛片日本片视频| 久久久91精品国产一区二区三区| 你懂得视频在线观看| 亚洲精品国产无天堂网2021| 日本熟妇毛耸耸xxxxxx| 一本色道久久综合亚洲精品按摩| 欧美在线视频精品| 欧美一区二区三区喷汁尤物| 西西人体44www大胆无码| 中文日韩在线视频| 色呦呦在线视频| 日本中文字幕久久看| 91精品在线免费视频| 国产伦精品一区二区三区四区视频| 国产欧美日韩在线观看视频| 在线视频欧美一区| 亚洲美女视频在线免费观看| 宅男噜噜噜66国产免费观看| 国产精品一区久久久久| 超碰97人人干| 亚洲乱码国产乱码精品精的特点| 亚洲欧美综合另类| 日韩一区二区视频在线观看| 三级网站在线看| 日韩中文字幕国产| 久草在线中文最新视频| 成人欧美一区二区三区黑人孕妇| 久久九九热re6这里有精品| 伊人情人网综合| 亚洲欧美日韩综合国产aⅴ| 性久久久久久久久久久久久久| www黄色在线观看| 69堂精品视频| 免费理论片在线观看播放老| 久久久精品999| 午夜无码国产理论在线| 99re6热在线精品视频播放速度| 国产一区二区三区不卡视频网站| www.亚洲视频.com| 极品美女销魂一区二区三区免费| 少妇精品一区二区| 一区二区三区在线视频免费观看| 中国精品一区二区| 亚洲男人天堂2019| 99热99re6国产在线播放| 国产精品女视频| 国产成人精品三级高清久久91| 成人黄色大片网站| 国产一区二区福利视频| 公肉吊粗大爽色翁浪妇视频| 无码av中文一区二区三区桃花岛| 99在线无码精品入口| 日韩中文视频免费在线观看| 性欧美18一19sex性欧美| 九九九九九精品| 亚洲国产专区校园欧美| 欧美性猛交乱大交| 自拍偷自拍亚洲精品播放| 中文字幕在线2018| 揄拍成人国产精品视频| 成人日韩在线| 欧洲精品一区色| 久久看片网站| 丰满少妇一区二区| 欧美性猛交xxxx免费看漫画| 天天色综合久久| 98精品国产高清在线xxxx天堂| 粉嫩的18在线观看极品精品| av 日韩 人妻 黑人 综合 无码| 韩国v欧美v日本v亚洲v| 美国一级片在线观看| 欧美日韩精品欧美日韩精品一综合 | 韩国毛片一区二区三区| 内射一区二区三区| 51午夜精品国产| av网址在线| 成人自拍爱视频| 亚洲全部视频| 亚洲人人夜夜澡人人爽| 欧美性猛交xxxx免费看| 久久久久久女乱国产| 国产精品人成电影| 91一区在线| 中文字幕在线播放一区二区| 夜夜爽夜夜爽精品视频| 韩国av免费在线观看| 午夜免费久久久久| 羞羞答答一区二区| 成年人网站大全| 国产精品视频一区二区三区不卡| 中文字幕一区二区久久人妻| 成年人精品视频| 国产精品自在| 熟女人妇 成熟妇女系列视频| 欧美国产日韩电影| 久久亚洲精品成人| 欧美高清hd| 日本福利视频在线| 欧美极品美女视频| 国产夫妻自拍av| 91高清免费视频| 青青草91久久久久久久久| 天天干天天色天天干| 亚洲综合无码一区二区| 日本大片在线观看| 成人国产在线视频| 亚洲国产mv| 免费看裸体网站| 日韩亚洲欧美成人一区| 一本大道色婷婷在线| 一本一本a久久| 成人免费视频app| 精品一区二区无码| 欧美国产日韩精品| 国产一区二区区别| 日本泡妞xxxx免费视频软件| 色综合久久九月婷婷色综合| 欧美r级在线| 久久一区二区三区欧美亚洲| 久久99国产精品免费| 日韩精品一区二区三区国语自制| 在线观看不卡av| 国产精品自在| www.久久av.com| 色综合久久天天综合网| 性国产高清在线观看| 日本不卡一区| 99久久精品国产麻豆演员表|