国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

ASP.NET Core Web API使用小技巧

共 13000字,需瀏覽 26分鐘

 ·

2021-03-30 21:32



轉(zhuǎn)自:墨墨墨墨小宇
cnblogs.com/danvic712/p/11255423.html

一、前言


在目前的軟件開發(fā)的潮流中,不管是前后端分離還是服務(wù)化改造,后端更多的是通過構(gòu)建 API 接口服務(wù)從而為 web、app、desktop 等各種客戶端提供業(yè)務(wù)支持,如何構(gòu)建一個(gè)符合規(guī)范、容易理解的 API 接口是我們后端開發(fā)人員需要考慮的。


在本篇文章中,我將列舉一些我在使用 ASP.NET Core Web API 構(gòu)建接口服務(wù)時(shí)使用到的一些小技巧,因才疏學(xué)淺,可能會(huì)存在不對(duì)的地方,歡迎指出。


代碼倉儲(chǔ):https://github.com/Lanesra712/ingos-server


二、Step by Step


因?yàn)楸酒恼轮猩婕暗降囊恍┲R(shí)點(diǎn)在之前的文章中也已經(jīng)有具體的解釋了,所以這里只會(huì)說明如何在 ASP.NET Core Web API 中如何去使用,不會(huì)做過多的詳細(xì)介紹。


本篇文章中使用的代碼是基于 .NET Core 2.2 + .NET Standard 2.0 進(jìn)行構(gòu)建的,如果你采用的版本與我使用的不同,可能最終實(shí)現(xiàn)起來的代碼會(huì)有所不同,請(qǐng)?zhí)崆爸ぁ?/span>


同時(shí),本篇文章中所有示例代碼都會(huì)存在于前言中所列出的 github repo 中,我會(huì)嘗試將每個(gè)功能點(diǎn)的開發(fā)作為一次 commit,并且也會(huì)在后續(xù)進(jìn)行不定期的更新完善,最終搭建一個(gè)基于領(lǐng)域驅(qū)動(dòng)思想的后端項(xiàng)目模板,如果對(duì)你有幫助的話,歡迎持續(xù)關(guān)注。


1、使用小寫路由

 

在我之前的一篇文章中《構(gòu)建可讀性更高的 ASP.NET Core 路由》有提到過,因?yàn)?.NET 默認(rèn)采用 Pascal 的類命名方式,如果采用默認(rèn)生成的路由,最終構(gòu)建出的路由地址會(huì)存在大小寫混在一起的情況,雖然在 .NET Core 中大小寫的路由地址最終都會(huì)對(duì)于到正確的資源上,但是為了更好的符合前端的規(guī)范,所以這里我們首先按照之前的文章中所列出的方法去修改默認(rèn)生成的路由地址格式。


因?yàn)檫@里我們最終想要實(shí)現(xiàn)的是符合 Restful 風(fēng)格的 API 接口,所以這里我們首先需要將默認(rèn)生成的 URL 地址改為全小寫模式。


public void ConfigureServices(IServiceCollection services)
{
// 采用小寫的 URL 路由模式
services.AddRouting(options =>
{
options.LowercaseUrls = true;
});
}



如果你有看過構(gòu)建可讀性更高的 ASP.NET Core 路由這篇文章,你會(huì)發(fā)現(xiàn)其實(shí)我們最終實(shí)現(xiàn)的是 hyphen(-) 格式的 Url 地址,那么這里我們?yōu)槭裁床贿M(jìn)行后續(xù)的修改了呢?


如果你有查看 .NET Core 默認(rèn)模板中生成的 API Controller,仔細(xì)看下,這里其實(shí)是使用的特性路由,所以這里我們并不能通過 Startup.UseMvc 定義的傳統(tǒng)路由模板,或是直接在 Startup.Configure 中的 UseMvcWithDefaultRoute 方法去修改我們的生成的路由地址格式。


[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
}


2、允許跨域請(qǐng)求


不管是后端接口的服務(wù)化改造,還是只是單純的前后端分離項(xiàng)目開發(fā),我們的前端項(xiàng)目與后端接口通常不會(huì)部署在一起,所以我們需要解決前端訪問接口時(shí)會(huì)涉及到的跨域訪問的問題。


針對(duì)跨域請(qǐng)求,我們可以采用 jsonp、或者是通過給 nginx 服務(wù)器配置響應(yīng)的 header 參數(shù)頭信息、或者是使用 CORS,又或是其它的解決方案。你可以自由選擇,這里我采用在后端接口中直接配置對(duì)于 CORS 的支持。


在 .NET Core 中,已經(jīng)在 Microsoft.AspNetCore.Cors 這個(gè)類庫中添加了對(duì)于 CORS 的支持,因?yàn)檫@個(gè)類庫是存在于我們已經(jīng)安裝的 .NET Core SDK 中,所以這里我們并不需要通過 Nuget 進(jìn)行安裝,可以直接使用。


在 .NET Core 中配置 CORS 規(guī)則,我們可以通過在 Startup.ConfigureServices 這個(gè)方法中添加不同的授權(quán)策略,之后再針對(duì)某個(gè) Controller 或是 Action 通過添加 EnableCors 這個(gè) Attribute 的方式進(jìn)行配置,這里如果指定了 policy 策略名稱,則會(huì)使用指定的策略,如果沒有指定,則適用于系統(tǒng)的默認(rèn)配置。同樣的,我們也可以只設(shè)置一個(gè)策略,直接針對(duì)整個(gè)項(xiàng)目進(jìn)行配置,這里我采用對(duì)整個(gè)項(xiàng)目采用通用的跨域請(qǐng)求配置方案。


在配置 CORS 策略時(shí),我們可以設(shè)置只允許來源于某些 URL 地址的請(qǐng)求可以訪問,或者是指定接口只允許某些 HTTP 方法進(jìn)行訪問,或者是在請(qǐng)求的 header 中必須包含某些信息才可以訪問我們的接口。


在下面的代碼中,我定義了針對(duì)整個(gè)項(xiàng)目的跨域請(qǐng)求策略,這里我只是設(shè)置了對(duì)于接口請(qǐng)求方 URL 地址的控制,通過讀取配置文件中的數(shù)據(jù),從而達(dá)到只允許某些 IP 可以訪問的我們接口的目的。


public class Startup
{
// 默認(rèn)的跨域請(qǐng)求策略名稱
private const string _defaultCorsPolicyName = "Ingos.Api.Cors";

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(
// 添加 CORS 授權(quán)過濾器
options => options.Filters.Add(new CorsAuthorizationFilterFactory(_defaultCorsPolicyName)) ).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// 配置 CORS 授權(quán)策略
services.AddCors(options => options.AddPolicy(_defaultCorsPolicyName,
builder => builder.WithOrigins(
Configuration["Application:CorsOrigins"]
.Split(",", StringSplitOptions.RemoveEmptyEntries).ToArray()
)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 允許跨域請(qǐng)求訪問
app.UseCors(_defaultCorsPolicyName);
}
}


例如在下面的設(shè)置中,我只允許這一個(gè)地址可以訪問我們的接口,如果需要指定多個(gè)的話,則可以通過英文的 , 進(jìn)行分隔。


"Application": {
"CorsOrigins": "http://127.0.0.1:5050"
}


某些情況下,如果我們不想進(jìn)行限制的話,只需要將值改為 * 即可。


"Application": {
"CorsOrigins": "*"
}


3、添加接口版本控制


在一些涉及到接口功能升級(jí)的場景下,當(dāng)我們需要修改接口邏輯而舊版本的接口無法停用的情況時(shí),為了減少對(duì)于原有接口的影響,我們可以采取為接口添加版本信息的形式,從而降低因采用不同版本而造成的影響。如果你想要詳細(xì)了解的話,可以查看這篇文章《ASP.NET Core 實(shí)戰(zhàn):構(gòu)建帶有版本控制的 API 接口》。


在實(shí)現(xiàn)具有版本控制的接口前,首先我們需要通過 Nuget 添加下面的兩個(gè) dll,因?yàn)槲沂窃?Ingos.Api.Core 這個(gè)類庫中進(jìn)行配置的,所以我安裝到了這個(gè)類庫下,你需要根據(jù)你自己的情況選擇最終是安裝到 Api 接口項(xiàng)目中還是在別的類庫下。


Install-Package Microsoft.AspNetCore.Mvc.Versioning
Install-Package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer


在安裝完成之后,我們就可以在 Startup.ConfigureServices 方法中,為項(xiàng)目中的接口配置版本信息,這里我采用的方案是將版本號(hào)添加到接口的 URL 地址中。


因?yàn)閷?duì)于所有中間件的配置都會(huì)在 Startup.ConfigureServices 方法中,為了保持該方法的純凈性,這里我寫了一個(gè)擴(kuò)展方法用于配置我們的 api 的版本,之后直接調(diào)用即可。


public static class ApiVersionExtension
{
/// <summary>
/// 添加 API 版本控制擴(kuò)展方法
/// </summary>
/// <param name="services">生命周期中注入的服務(wù)集合 <see cref="IServiceCollection"/></param>
public static void AddApiVersion(this IServiceCollection services)
{
// 添加 API 版本支持
services.AddApiVersioning(o =>
{
// 是否在響應(yīng)的 header 信息中返回 API 版本信息
o.ReportApiVersions = true;

// 默認(rèn)的 API 版本
o.DefaultApiVersion = new ApiVersion(1, 0);

// 未指定 API 版本時(shí),設(shè)置 API 版本為默認(rèn)的版本
o.AssumeDefaultVersionWhenUnspecified = true;
});

// 配置 API 版本信息
services.AddVersionedApiExplorer(option =>
{
// api 版本分組名稱
option.GroupNameFormat = " v VVVV";
// 未指定 API 版本時(shí),設(shè)置 API 版本為默認(rèn)的版本
option.AssumeDefaultVersionWhenUnspecified = true;
});
}
}


擴(kuò)展方法最終實(shí)現(xiàn)方式如上面的代碼所示,之后我們就可以直接在 ConfigureServices 方法中直接進(jìn)行調(diào)用這個(gè)擴(kuò)展方法就可以了。


// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Config api version
services.AddApiVersion();
}


現(xiàn)在我們刪除項(xiàng)目創(chuàng)建時(shí)默認(rèn)生成的 ValuesController,在 Controllers 目錄下建立一個(gè) v1 文件夾,代表此文件夾下都是 v1 版本的控制器。添加一個(gè) UsersController 用來獲取系統(tǒng)的用戶資源,現(xiàn)在項(xiàng)目的文件結(jié)構(gòu)如下圖所示。



現(xiàn)在我們來改造我們的 UsersController,我們只需要在 Controller 或是 Action 上添加 ApiVersion 特性就可以指定當(dāng)前 Controller/Action 的版本信息。同時(shí),因?yàn)槲倚枰獙?API 的版本信息添加到生成的 URL 地址中,所以這里我們需要修改特性路由的模板,將我們的版本以占位符的形式添加到生成的路由 URL 地址中,修改完成后的代碼及實(shí)現(xiàn)的效果如下所示。


[ApiVersion("1.0")]
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
public class UsersController : ControllerBase
{
}



4、添加對(duì)于 Swagger 接口文檔的支持


在前后端分離開發(fā)的情況下,我們需要提供給前端開發(fā)人員一個(gè)接口文檔,從而讓前端開發(fā)人員知道以什么樣的 HTTP 方法或是傳遞什么樣的參數(shù)給后端接口,從而獲取到正確的數(shù)據(jù),而 Swagger 則提供了一種自動(dòng)生成接口文檔的方式,同時(shí)也提供類似于 Postman 的功能,可以實(shí)現(xiàn)對(duì)于接口的實(shí)時(shí)調(diào)用測試。


首先,我們需要通過 Nuget 添加 Swashbuckle.AspNetCore 這個(gè) dll 文件,之后我們就可以在此基礎(chǔ)上實(shí)現(xiàn)對(duì)于 Swagger 的配置。


Install-Package Swashbuckle.AspNetCore


與上面配置 API 接口的版本信息相似,這里我依舊采用構(gòu)建擴(kuò)展方法的方式來實(shí)現(xiàn)對(duì)于 Swagger 中間件的配置。具體的配置過程可以查看我之前寫的文章(ASP.NET Core 實(shí)戰(zhàn):構(gòu)建帶有版本控制的 API 接口),這里只列出最終配置完成的代碼。


public static void AddSwagger(this IServiceCollection services)
{
// 配置 Swagger 文檔信息
services.AddSwaggerGen(s =>
{
// 根據(jù) API 版本信息生成 API 文檔
//
var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
foreach (var description in provider.ApiVersionDescriptions)
{
s.SwaggerDoc(description.GroupName, new Info
{
Contact = new Contact
{
Name = "Danvic Wang",
Email = "[email protected]",
Url = "https://yuiter.com"
},
Description = "Ingos.API 接口文檔",
Title = "Ingos.API",
Version = description.ApiVersion.ToString()
});
}
// 在 Swagger 文檔顯示的 API 地址中將版本信息參數(shù)替換為實(shí)際的版本號(hào)
s.DocInclusionPredicate((version, apiDescription) =>
{
if (!version.Equals(apiDescription.GroupName))
return false;
var values = apiDescription.RelativePath
.Split( / )
.Select(v => v.Replace("v{version}", apiDescription.GroupName)); apiDescription.RelativePath = string.Join("/", values);
return true;
});

// 參數(shù)使用駝峰命名方式
s.DescribeAllParametersInCamelCase();

// 取消 API 文檔需要輸入版本信息
s.OperationFilter<RemoveVersionFromParameter>();

// 獲取接口文檔描述信息
var basePath = Path.GetDirectoryName(AppContext.BaseDirectory);
var apiPath = Path.Combine(basePath, "Ingos.Api.xml");
s.IncludeXmlComments(apiPath, true);
});
}


當(dāng)我們配置完成后就可以在 Startup 類中去啟用 Swagger 文檔。


public void ConfigureServices(IServiceCollection services)
{
// 添加對(duì)于 swagger 文檔的支持
services.AddSwagger();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)
{
// 啟用 Swagger 文檔
app.UseSwagger();
app.UseSwaggerUI(s =>
{
// 默認(rèn)加載最新版本的 API 文檔
foreach (var description in provider.ApiVersionDescriptions.Reverse())
{ s.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json",
$"Sample API {description.GroupName.ToUpperInvariant()}");
}
});
}



因?yàn)槲覀冊(cè)谥霸O(shè)置構(gòu)建的 API 路由時(shí)包含了版本信息,所以在最終生成的 Swagger 文檔中進(jìn)行測試時(shí),我們都需要在參數(shù)列表中添加 API 版本這個(gè)參數(shù)。這無疑是有些不方便,所以這里我們可以通過繼承 IOperationFilter 接口,控制在生成 API 文檔時(shí)移除 API 版本參數(shù),接口的實(shí)現(xiàn)方法如下所示。


public class RemoveVersionFromParameter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
var versionParameter = operation.Parameters.Single(p => p.Name == "version");
operation.Parameters.Remove(versionParameter);
}
}


當(dāng)我們實(shí)現(xiàn)自定義的接口后就可以在之前針對(duì) Swagger 的擴(kuò)展方法中調(diào)用這個(gè)過濾方法,從而實(shí)現(xiàn)移除版本信息的目的,擴(kuò)展方法中的添加位置如下所示。


public static void AddSwagger(this IServiceCollection services)
{
// 配置 Swagger 文檔信息
services.AddSwaggerGen(s =>
{
// 取消 API 文檔需要輸入版本信息
s.OperationFilter<RemoveVersionFromParameter>();
});
}


最終的實(shí)現(xiàn)效果如下圖所示,可以看到,參數(shù)列表中已經(jīng)沒有版本信息這個(gè)參數(shù),但是我們?cè)谶M(jìn)行接口測試時(shí)會(huì)自動(dòng)幫我們添加上版本參數(shù)信息。



這里需要注意,因?yàn)槲覀冃枰谧罱K生成的 Swagger 文檔中顯示出我們對(duì)于 Controller 或是 Action 添加的注釋信息,所以這里我們需要在 Web Api 項(xiàng)目的屬性選項(xiàng)中勾選上輸出 XML 文檔文件。同時(shí)如果你不想 VS 一直提示你有方法沒有添加參數(shù)信息,這里我們可以在取消顯示警告這里添加上 1591 這個(gè)參數(shù)。



5、構(gòu)建符合 Restful 風(fēng)格的接口


在沒有采用 Restful 風(fēng)格來構(gòu)建接口返回值時(shí),我們可能會(huì)習(xí)慣于在接口返回的信息中添加一個(gè)接口是否請(qǐng)求成功的標(biāo)識(shí),就像下面代碼中示例的這種返回形式。


{
sueecss: true
msg: ,
data: [{
id: 20190720214402 ,
name: zhangsan
}]
}


但是,當(dāng)我們想要構(gòu)建符合 Restful 風(fēng)格的接口時(shí),我們就不能再這樣進(jìn)行設(shè)計(jì)了,我們應(yīng)該通過返回的 HTTP 響應(yīng)狀態(tài)碼來標(biāo)識(shí)這次訪問是否成功。一些比較常用的 HTTP 狀態(tài)碼如下表所示。



我們知道 HTTP 共有四個(gè)謂詞方法,分別為 Get、Post、Put 和 Delete,在之前我們可能更多的是使用 Get 和 Post,對(duì)于 Put 和 Delete 方法可能并不會(huì)使用。


同樣的,如果我們需要?jiǎng)?chuàng)建符合 Restful 風(fēng)格的接口,我們則需要根據(jù)這四個(gè) HTTP 方法謂詞一些約定俗成的功能定義去定義對(duì)應(yīng)接口的 HTTP 方法。



例如,對(duì)于一個(gè)獲取所有資源的方法,我們可能會(huì)定義接口的默認(rèn)返回 HTTP 狀態(tài)碼為 200 或是 400,當(dāng)狀態(tài)碼為 200 時(shí),代表數(shù)據(jù)獲取成功,接口可以正常返回?cái)?shù)據(jù),當(dāng)狀態(tài)碼為 400 時(shí),則代表接口訪問出現(xiàn)問題,此時(shí)則返回錯(cuò)誤信息對(duì)象。


在 ASP.NET Core Web API 中,我們可以通過在Action上添加 ProducesResponseType 特性來定義接口的返回狀態(tài)碼。通過 F12 按鍵我們可以進(jìn)入 ProducesResponseType 這個(gè)特性,可以看到這個(gè)特性存在兩個(gè)構(gòu)造方法,我們可以只定義接口返回 HTTP 狀態(tài)碼或者是在定義接口返回的狀態(tài)碼時(shí)同時(shí)返回的具體對(duì)象信息。


上面給出的接口案例的示例代碼如下所示,從下圖中可以看到,Swagger 會(huì)自動(dòng)根據(jù)我們的 ProducesResponseType 特性來列出我們接口可能返回的 HTTP 狀態(tài)碼和對(duì)象信息。這里因?yàn)槭鞘纠绦?,UserListDto 并沒有定義具體的屬性信息,所以這里顯示的是一個(gè)不包含任何屬性的對(duì)象數(shù)組。


/// <summary>
/// 獲取全部的用戶信息
/// </summary>
/// <returns></returns>
[HttpGet]
[ProducesResponseType(typeof(IEnumerable<UserListDto>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public IActionResult Get()
{
// 1、獲取資源數(shù)據(jù)
// 2、判斷數(shù)據(jù)獲取是否成功
if (true)
return Ok(new List<UserListDto>());
else
return BadRequest(new
{
statusCode = StatusCodes.Status400BadRequest,
description = "錯(cuò)誤描述",
msg = "錯(cuò)誤信息"
});
}



可能這里你可能會(huì)有疑問,當(dāng)接口返回的 HTTP 狀態(tài)碼為 400 時(shí),返回的信息是什么鬼,與我們定義的錯(cuò)誤信息對(duì)象字段不同???原來,在 ASP.NET Core 2.1 之后的版本中,對(duì)于 API 接口返回 400 的 HTPP 狀態(tài)碼會(huì)默認(rèn)返回 ProblemDetails 對(duì)象,因?yàn)檫@里我們并沒有將接口中的返回 BadRequest 中的錯(cuò)誤信息對(duì)象作為 ProducesResponseType 特性的構(gòu)造函數(shù)的參數(shù),所以這里就采用了默認(rèn)的錯(cuò)誤信息對(duì)象。


當(dāng)然,當(dāng)接口的 HTTP 返回狀態(tài)碼為 400 時(shí),最終還是會(huì)返回我們自定義的錯(cuò)誤信息對(duì)象,所以這里為了不造成前后端對(duì)接上的歧義,我們最好將返回的對(duì)象信息也作為參數(shù)添加到 ProducesResponseType 特性中。



同時(shí),除了上面示例的接口中通過返回 OK 方法和 BadRequest 方法來表明接口的返回 HTTP 狀態(tài)碼,在 ASP.NET Core Web API 中還有下列繼承于 ObjectResult 的方法來表明接口返回的狀態(tài)碼,對(duì)應(yīng)信息如下。



6、使用 Web API 分析器


在上面的示例中,因?yàn)槲覀冃枰付ń涌谛枰祷氐?HTTP 狀態(tài)碼,所以我們需要提前添加好 ProducesResponseType 特性,在某些時(shí)候我們可能在代碼中添加了一種 HTTP 狀態(tài)碼的返回結(jié)果,可是卻忘了添加特性描述,那么有沒有一種便捷的方式提示我們呢?


在 ASP.NET Core 2.2 及以后更新的 ASP.NET Core 版本中,我們可以通過 Nuget 去添加 Microsoft.AspNetCore.Mvc.Api.Analyze 這個(gè)包,從而實(shí)現(xiàn)對(duì)我們的 API 進(jìn)行分析,首先我們需要將這個(gè)包添加到我們的 API 項(xiàng)目中。


Install-Package Microsoft.AspNetCore.Mvc.Api.Analyzers


例如在下面的接口代碼中,我們根據(jù)用戶的唯一標(biāo)識(shí)去尋找用戶數(shù)據(jù),當(dāng)獲取不到數(shù)據(jù)的時(shí)候,返回的 HTTP 狀態(tài)碼為 400,而我們只添加了 HTTP 狀態(tài)碼為 200 的特性說明。此時(shí),分析器將 HTTP 404 狀態(tài)代碼的缺失特性說明做為一個(gè)警告,并提供了修復(fù)此問題的選項(xiàng),我們進(jìn)行修復(fù)后就可以自動(dòng)添加特性。


/// <summary>
/// 獲取用戶詳細(xì)信息
/// </summary>
/// <param name="id">用戶唯一標(biāo)識(shí)</param>
/// <returns></returns>
[HttpGet("{id}")]
[ProducesResponseType(typeof(UserEditDto), StatusCodes.Status200OK)]
public IActionResult Get(string id)
{
// 1、根據(jù) Id 獲取用戶信息
UserEditDto user = null;
if (user == null)
return NotFound();
else
return Ok(user);
}



但是,在自動(dòng)完成文檔補(bǔ)全后其實(shí)還是需要我們進(jìn)行一些操作的,例如,如果我們需要指定返回值的 Type 類型,還是需要我們自己手動(dòng)添加到 ProducesResponseType 特性上的。


在進(jìn)行特性補(bǔ)齊的時(shí)候,分析器也幫我們填加了一個(gè)ProducesDefaultResponseType特性。


通過在微軟的文檔中指向的 Swagger 文檔(Swagger Default Response)中可以了解到,如果我們接口不管是什么狀態(tài),最終返回的 response 響應(yīng)結(jié)構(gòu)都是相同的,我們就可以直接使用 ProducesDefaultResponseType 特性來指定 response 的響應(yīng)結(jié)構(gòu),而不需要每個(gè) HTTP 狀態(tài)都添加一個(gè)特性。


三、總結(jié)


在本篇文章中,主要介紹了一些我在使用 ASP.NET Core Web API 的過程中使用到的一些小技巧,以及在以前踩過坑后的一些解決方案,如果對(duì)你能有一點(diǎn)的幫助的話,不勝榮幸。同時(shí),如果你有更好的解決方案,或者是針對(duì)一些你之前踩過的 Web API 坑的解決方案,也歡迎你在評(píng)論區(qū)中提出

回復(fù) 【關(guān)閉】學(xué)關(guān)
回復(fù) 【實(shí)戰(zhàn)】獲取20套實(shí)戰(zhàn)源碼
回復(fù) 【被刪】學(xué)個(gè)
回復(fù) 【訪客】學(xué)
回復(fù) 【小程序】學(xué)獲取15套【入門+實(shí)戰(zhàn)+賺錢】小程序源碼
回復(fù) 【python】學(xué)微獲取全套0基礎(chǔ)Python知識(shí)手冊(cè)
回復(fù) 【2019】獲取2019 .NET 開發(fā)者峰會(huì)資料PPT
回復(fù) 【加群】加入dotnet微信交流群

臥槽!微信可以改彩色昵稱了!??!


臥槽,微信狀態(tài)被玩壞了,附大量微信狀態(tài)視屏素材!




瀏覽 39
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产麻豆一区二区三区| 中文字幕av无码| 亚洲成色A片77777在线小说| 日本黄色视频网| 一区二区三区国产精品| 三级无码av| 五月丁香在线观看| 一起操在线| 亚洲国产激情| 乱伦综合网| 91在线无码精品在线看| AV无码一区| 一区二区中文字幕| 日韩一级一级一级| 青春草视频| 黄色片视频网站| 北条麻妃高清无码| 成人免费毛片蓝莓| 色资源站| 99re6热在线精品视频| 日韩精品无码一区二区三区| 无码中文综合成熟精品AV电影 | 99成人乱码一区二区三区在线| 人妻精品| 精品国产国产没封| 影音先锋成人av| 欧美成人网站在线| 亚洲AV电影在线| 欧美18禁黄免费网站| 97超碰大香蕉| 内射国产| 91欧美精品| 91久久成人| 久久久77| 国产午夜视频在线观看| 麻豆成人网| 四川BBB搡BBB爽爽爽欧美| 五月丁香免费视频| 久久免费成人电影| 亚洲黄色天堂| 91精品综合| 亚洲高清福利视频| 巨乳无码噜噜噜久久久| 在线观看免费无码| 国产一视频| 粉嫩小泬BBBBBB免费看| 影音先锋国产资源| 国产搡BBB爽爽爽视频| 男女日逼网站| 91无码视频在线观看| 国产秘精品一区二区三区免费 | 蜜桃Av噜噜一区二区| 四川揉BBB搡BBB| 国产成人在线播放| 波多野结衣视频网站| 九九热精品在线视频| 成人自拍视频在线观看| 亚洲五月丁香| 国产精品爽爽久久久久| 午夜福利在线视频| 国产女人18毛片水真多1| 北条麻妃无码一区二区| 91福利视频网站| 99久久婷婷国产综合精品hsex | 日韩一级一片| 欧美99| 亚洲成人在线视频| 久久久一区二区| 日韩人妻一区二区| 国产精品毛片久久久久久久| 人人妻人人草| 777777视频| 強姦婬片A片AAA毛片Mⅴ| 国产熟妇码视频| 五月天福利视频| 色色视频网站| 青青草综合网| 亚洲热在线| 欧美A视频| 深爱五月婷婷| 欧美日韩免费看| 精品福利视频导航| 国产午夜视频在线观看| 人人操网| 黄色在线网站| 亚洲免费无码| 日本高清一区二区高清免费视频 | 夜夜骚av.一区二区三区| 黄色网页在线观看| 婷婷大香蕉| 大香蕉尹人在线| 国产xxxx| 激情一一区二区三区| 中文字幕观看av| 韩国中文字幕HD久久精品| 日韩大片免费观看| 艹b视频在线观看| 日韩精品一区二区三免费视频 | 亚洲无码一区在线| 暖暖日本在线| 成人网站三级片| 欧美中文字幕在线播放| 午夜精品久久久| 麻豆内射| 五月激情啪啪| 成人A片一级| 久久久999| 91成人在线观看学生和老师| 亚洲免费观看| 日韩精品一区二区三| 中文字幕视频在线免费观看| 东京热网站在线观看| 97色色视频| 天天爽夜夜爽夜夜爽| 国产亚洲精品午夜福利巨大软件| 亚洲无码AV一区二区| 北京熟妇搡BBBB搡BBBB| 熟睡侵犯の奶水授乳在线| 精品一区二区久久久久久久网站| 国产精品色色| 中文字幕一区二区三区精华液| 99热最新网址| 亚洲视频免费在线观看| 午夜啪啪网站| 国产特级毛片AAAAAA| 99re视频在线播放| 久色99| 一区在线免费观看| 有码中文字幕在线观看| 日韩欧美精品在线观看| 无码精品人妻一区二区三刘亦菲| 天堂中文字幕在线观看| 久热99| 黄色小视频在线| 综合激情五月婷婷| 婷婷国产精品视频| 欧美footjob高跟脚交| 一级免费毛片| a视频免费观看| 岛国av在线播放| 日本三区视频| 亚洲精品影院| 山西真实国产乱子伦| 韩国色情中文字幕| 亚洲天堂在线观看免费| 91一区在线观看| 日逼天堂| 91在线视频免费| 国产黄色电影| 无码囯无精品毛片大码| 亚洲综合图色40p| 成人做爰A片AAA毛真人| 国产又爽又黄免费网站在| a色视频| 91国产视频在线观看| 91精品91久久久中77777| 欧美成人无码A片免费| 亚洲精品国产AV婷婷| 日韩欧AV| 色哟哟国产精品| 在线中文字幕亚洲| 偷偷撸在线| 无码囯无精品毛片大码| av天堂一区| 人人操人人色| 大伊人久久| 九九亚洲精品| 亚洲色在线视频| 黄色日逼片| 午夜免费网站| 美女视频一区二区三区| 婷婷午夜精品久久久久久性色AV | 91熟女视频| 最新中文字幕免费MV第一季歌词| 精品无码不卡| 中文字幕免费视频在线播放| 国产妞干网| av在线小说| 亚洲AV无码成人精品区| 天天综合在线观看| 国产AV高清| 中文字幕人妻互换av久久| 91熟女视频| 成人精品毛片| 国产乱伦AV网站| 久久久久久一| www.日韩精品| 日韩一级无码特黄AAA片| 欧美污视频在线观看| 在线综合国产欧美| 久久波多野结衣| 奇米97| 爱爱综合| 美女毛片网站| 国产av高清| 美日韩无码| 九七人妻| 影音先锋中文字幕av| 在线免费小黄片| 亚洲第一在线| 国产精品18禁| 国产做爱视频| 尻屄视频免费| A一级黄片| 黄色内射在线播放| 香蕉视频色| 男人的天堂网页| 日日擼夜夜擼| 天天干天天撸影视| 9999久久久久| 国产精视频| 东京热黄色| 丰满人妻一区二区三区四区不卡| av免费观看网站| 婷婷色777777| 三级片在线观看视频| 性日韩| 北条麻妃在线视频聊天| 国产在线视频网站| 亚洲成人高清在线| 久久国产精品影院| 天天日很很操| 伊人在线观看视频| 91精品综合| 免费无码进口视频| 日皮视频在线看| 熟妇熟女一区二区三区| 丁香花五月天| 草比网站| 十八禁网站在线观看| 国产欧美综合视频| 亚洲综合伊人| 久久人体| 熟妇一区| 无码人妻丰满熟妇| 一区二区色| 丰满熟妇| 开心五月激情婷婷| 日本一级视频| 各种BBwBBwBBwBBw| 亚洲人妻有码| 国产理论在线| 美女av网站| 黄色av网站在线观看| 内射学生妹J亅| 狠操网| 人人做人人爽| 国产欧美一区二区三区视频| 国产99热| 久久6| av资源在线| 色播五月丁香| 无码免费观看视频| 免费国产黄色| 激情五月综合网| 少妇搡BBBB搡BBB搡澳门| 2014天堂网| 激情综合婷婷| 日韩在线高清| 国产三级91| 哪里可以看毛片| 成人亚洲电影| 黄色一级a片| 激情图区| 69AV在线视频| 国产91在线播放| 色色五月婷婷| 欧美青青草| 亚洲久操| 无码内射视频| 人人操人人爽| 亚洲精品国产精品乱玛不99| 久久精品视频观看| 婷婷五月天在线电影| 欧美A一| 精品国产一二三| 国产无遮挡又黄又爽在线观看 | 波多野成人无码精品69| 欧美手机在线视频| 97超碰大香蕉| 国产黄色电影在线观看| 日韩三级AV在线观看| 色四播播| 人人操人人看人人干| 亚洲国产免费视频| 欧美老熟妇BBBBB搡BBB| 男女成人视频| 大香蕉综合久久| 91三级在线观看| 久青草资源福利视频| 被黑人猛躁10次高潮视频| 丁香五月激情小说| 一个色综合网| 亚洲精品视频在线| 91精品婷婷国产| 黄色网址五月天| 一区二区国产视频| 成人综合娱乐网| 西西4444大胆无码视频| 91麻豆免费视频| 一区二区无码高清| 91人妻人人澡人人| 韩日在线| 中文字幕福利电影| 靠逼国产| 人妻18无码人伦一区二区三区精品| 97成人在线视频| 久久一区二区三区四区五区| 国产真实乱婬A片三区高清蜜臀 | 免费在线黄色视频| 网址你懂得| 伊人久久久| 超碰在线91| 麻豆少妇| 91无码一区二区三区| 日韩成人黄片| 日本不卡视频在线| 日韩视频免费观看| 精品国产免费观看久久久_久久天天 | 中文字幕在线精品| 桃色AV| 麻豆AV电影| 先锋成人电影| 国产午夜成人免费看片无遮挡| 亚洲无码在线免费| 欧美精品久久久久久| 久草蜜臀| 欧美日韩成人网站| 午夜福利爱爱视频| 蜜芽av在线| 久久精品美臀| 日韩在线观看免| 五月天一区二区三区| 亚洲专区中文字幕| 小骚逼操死你| 欧美一区三区视频z| 日本中文字幕在线观看视频| av在线免费观看网址| 激情开心五月天| 激情亚洲| 91久久久久久久久久| 懂色AV一区二区三区国产中文在线| 黄色美女网站| 99国产视频| 欧美一区二区三区在线播放 | 六月婷婷在线| 午夜无码高清| 97超碰大香蕉| 美女少妇激情BBBB| 无码动漫av| 韩日一区| 日韩人妻无码一区二区三区中文| 久久久WWW成人免费无遮挡大片| 少妇无码在线观看| 青草青视频| 综合五月婷婷| 亚洲男女免费视频| 99综合在线| 一区二区三区精品婷婷| 国产伦精品一级A片视频夜夜| 69国产精品成人无码视频色| 免费无码国产在线53| 蝌蚪窝免费在线视频| 99热精品国产| 激情视频网| 色色色免费视频| 97人人色| 欧美激情在线| 欧美wwwww| 国产乱伦对白| 免费中文字幕日韩欧美| 亚洲加勒比久久88色综合| 爱爱视频h| 久久99精品国产| 亚洲天堂一| 大香蕉伊人网站| 欧美日韩午夜福利视频| 51妺嘿嘿午夜福利视频| 国产精品综合激情| 91精品国产闺蜜国产在线闺蜜| 五月丁香视频在线观看| 在线无码一区| 无码国产精品一区二区性色AV| 天天操夜夜操人人操| 亚洲日本中文字幕| 无码在线观看免费| 成人视频一区二区| 一区二区三区麻豆| 色综合天天综合网国产成人网| 三级片AAA成人免费| 国产欧美日韩在线播放| 午夜国产在线观看| 日本免费在线观看视频| 一级全黄120分钟免费| 久久午夜无码鲁片午夜精品男男| 婷婷五月成人| 激情五月综合网| 一级片网址| 嫩BBB搡BBB槡BBB小号| av免费观看网站| 再深点灬好爽灬轻点久久国产| 国精产品秘一区二区| 日批动态图| 日韩色情片| 国产视频精品一区二区三区| 亚洲无aV在线中文字幕| 无码任你操| 爱搞搞就要搞搞| 操逼视频国产91| 激情小说五月天| 搡BBBB搡BBB搡五十粉嫩| 中文字幕一区二区三区日本在线| 午夜黄片| 中文字幕在线播放视频| 国产黄色电影| 成人黄色视频网站在线观看| 日韩欧美亚洲| 日韩乱妇| 久久黄色免费看| 日韩中文在线播放| 欧美爱| 亚洲精品久久久久久久久豆丁网| 日韩在线观看AV| 美女操逼网站| 国内一级黄片| 国产综合久久777777麻豆| 蜜桃视频免费网站| 人妻无码久久| 大香蕉玖玖| 亚洲第一页在线观看| 日韩黄色片在线观看| 日朝无码| 国产精品久久久久久久9999| 成人免费在线视频| 麻豆成人网| 日韩黄色电影在线免费观看| 日日夜夜拍| 天天日综合网| 日韩欧美中文在线| 婷婷五月天色综合| 91成人在线观看学生和老师| 黄片视频免费播放| 北条麻妃无码精品AV怎么看 | 免费一级AAAAA片在线播放| 超碰97免费| 性爱视频小说| 欧美午夜精品一区二区蜜桃| aa久久| 国产在线你懂得| 豆花成人视频| 亚洲欧美国产高清vA在线播放| 日韩无码中文字幕| 东北女人操逼视频| 天天拍夜夜爽| 一区二区三区视频在线观看| 日本精品黄色| 日本成人激情视频| 中文字幕在线不卡| 亚洲精品国产精品国自产| 97人妻精品黄网站| 一区二区三区精品视频| 国产成人精品a视频一区| 一区二区在线视频| 国产精品久久久久无码| 亚洲中文视频在线| 伊人久久婷婷| 97无码精品人妻一区二区三区| 777偷窥盗摄00000| 人妻熟女字幕一区二区| 亚久久久| 日韩一级A| 天天干天天添| 欧美一级黄色大片| 日本wwwwww| 欧美日韩成人| 一区二区三区电影| 草久伊人| 麻豆电影| 色色亚洲| 色婷婷激情视频| 亚洲视频在线观| 秋霞福利| 成片免费观看视频大全| 蜜臀久久99精品久久久久久婷婷| 国产成人高清在线| 东京热精品视频| 天天撸一撸视频| 天天A片| 黄色特级aaa片| 99热在线看| 无码人妻丰满熟妇精品| 日B视频网站| 久久一级片| 在线视频免费观看| 中文字幕av久久爽爽| 性满足BBwBBWBBw| 亚洲中文字幕一区| 久草中文网| 久久综合在线| 久碰人妻人妻人妻| 99热在线播放| 亚洲中文字幕一区二区| 日韩一级片免费看| 少妇人妻在线| 99美女精品视频| 豆花成人视频| 国产成人精品二三区麻豆| 最近日本中文字幕中文翻译歌词| 亚洲中文视频在线| 伊人激情| 亚洲大片| 日韩精品久久久久久久酒店| H网站在线观看| 免费黄色小视频在线观看| 欧美日韩成人| 欧美日韩高清在线| 91成人无码看片在线观看网址| 深夜福利一区二区| 国产精品欧美激情| 日韩视频一级| 热热色| 四川乱子伦95视频国产| 老婆被黑人杂交呻吟视频| 另类欧美| 男人天堂网AV| 免费一级婬片AAA片毛片A级| 爱搞逼综合网| 五月天社区| 丁香五月天在线视频| va婷婷在线免费观看| 久操免费在线观看| 夜夜夜久久久| 国产中文字幕片| 无码AV在线播放| 成人视频无码| 中文字幕日本在线| 欧美激情影院| 久久精品观看| 无码人妻久久一区二区三区蜜桃 | 成人免费黄片| 无码人妻一区二区三区| 影音先锋资源站| 国产免费高清| 免费黄色一级电影| 草逼视频网站| 久视频在线观看| 亚洲成人在线一区| 日韩精品无码av| 羽月希在线播放| 青青在线| 色播五月天| 精品操逼| 成人爱爱视频| 色婷婷导航| 四川少扫搡BBw搡BBBB| 亚洲免费小视频| 91丨PORNY丨丰满人妻网站| 久久极品| 91国语又粗又大对白| 亚洲成人AV电影| 中文字幕第23页| 国产乱子伦真实精品!| 西西人体444www| 国产一精品一aⅴ一免费| 午夜亚洲AV永久无码精品麻豆 | 九九九视频在线观看| 爱爱视频天天操| 秋霞午夜久久| 91麻豆国产福利在线观看| 日韩AⅤ无码一区二区三区| 亚洲二区无码| 国产日韩欧美久久| 国产超级无码高清在线视频观看| 亚洲最新AV在线| 无码人妻av一区| 午夜爱爱免费视频| 1204手机看片| 国产第页| 亚洲国产另类无码| 熟女熟妇人妻一区二区三区| 骚逼久久| 日韩免费AV电影| 91香蕉在线视频| 中文字幕在线不卡视频| 国产亚洲91| 91麻豆香蕉| AV在线免费观看网址| 国产三级av在线| 久久国产性爱| 四虎精品影院| 国产毛片在线| 99在线观看视频| 成人夜间视频| 人人操人人摸人人射| 亚洲影院第一页在线观看| 婷婷五月亚洲精品AAA片在| 2018天天日天天操| 99久久国产热无码精品免费| 免费无码国产在线55| 综合久久亚洲| 免费成人大片| 国产一区二区三区免费播放| 黄色无码网站| 一区二区精品| 欧美亚洲色色网视频| 视频一区二区免费| 欧美三级视频在线| 日韩高清无码观看| 色片无码| 91视频免费播放| 精品99视频| 婷婷国产亚洲精品网站| 91av视频| 求毛片网址| 中文在线第一页| 日韩三级在线播放| 亚洲日韩精品在线观看| 久久久无码视频| www.色五月| 国产三级视频| 狠狠操一区| 黄色国产在线| 久久成人无码| 高清AV在线| 久久久久久AV| 99视频在线| 中文乱码在线观看| 蜜臀精品色无码蜜臀AV| 亚洲欧美影院| 91中文字幕+乱码| 天天爽天天干| 国产最新在线| 91日韩高清| 亚洲网站在线播放| 天天射天天爽| 成人A片视频| 成人在线观看无码| 蜜桃久久久亚洲| 亚洲九九视频| 一本色道久久88加勒比| 亚洲色图15P| 欧美性猛交XXXX乱大交| 欧美污视频在线观看| 成人精品一区二区三区中文字幕 | 中文字幕亚洲无码视频| 色丁香五月婷婷| 黄色精品| 国产特黄级AAAAA片免| 99视频在线精品| 国产精品久久久久久久久夜色| 天天干视频| 啪啪人妻| 成人在线激情| 你懂的网址在线观看| 精品视频一区二区三区| 爱搞在线观看wwww| 爱就色色网| 国产一区二区成人久久919色| 天天干天天操天天射| 亚洲国产av一区| 国产免费内射| 欧美一級黃色A片免費看| 人人色人人| 日韩无码黄色电影| 懂色AV一区二区三区国产中文在线 | 欧美狂操| 91精品无码| 亚洲国产高清国产精品| 91AV免费在线观看| 无码a区| 波多野结衣无码流出| 五月天婷婷无码| 高潮国产视频| 中文字幕在线免费看| 一级乱伦网站| 国产不卡在线观看| 青青国产视频| 在线A片免费观看| 色屁屁草草影院ccyycom| 亚洲日韩久久| 老鸭窝成人| 国产精品久久久久久久久久久久久| 国产乱婬AAAA片视频| 欧美日韩三级在线| 亚洲人妻系列| 欧洲精品码一区二区三区免费看| 特黄特色免费视频| 四季AV一区二区夜夜嗨| 国产三四区久久| 久久久久黄片| 五月丁香激情视频| 久久特黄| 特级西西444www大精品| 91无码视频| 国产老女人农村HD| 午夜理论片| 国产一级电影网站| 久久久蜜桃| 黄片视频在线观看| 特黄一级片| 成人福利网站| 久久久精品999| 操少妇逼| 成人做爰免费网站2023| 国产人妻一区二区精选| 久热无码| 动漫人物插画动漫人物的视频软件 | 中文字幕精品人妻| 38D蜜桃臀| 五月丁香激情婷婷| 午夜精品一区二区三区在线视频| 日韩视频中文字幕在线| 在线观看欧美日韩| 久久天堂av| 无码人妻精品一区二区三区蜜臀百度 | 色色激情视频| 亚洲成人精品一区二区| 嫩草视频在线观看| 深爱激情五月婷婷| 国产精品久久久精品| 嘿嘿av| 91精品网站| 久久久久成人视频| 亚洲激情综合网| 久久婷婷热| 国产妞干网| 内射一区二区| 久久精品视频免费观看| 亚洲无码成人AV| 人人肏| 伊人久久久久久久久久久| 精品区| 日本精品视频在线| 欧美精品久久| 一级a一级a爰片免费免免中国A片 一级一级a免一级a做免费线看内裤 | 丁香六月婷婷综合缴| 日韩成人视频在线观看| 成人免费乱码大片a毛片蜜芽| 毛片一区二区三区| 天天操婷婷| 安徽妇搡BBBB搡BBBB按摩小说| 黄色av免费在线| 国产欧美日韩在线| 国产精品免费观看久久久久久久久 | 黄色A级片| 欧美三级一级| 日本一级按摩片免费观看| 亚洲日韩精品在线观看| 熟女456| 精品成人A片久久久久久不卡三区 免费看成人A片无码照片88hⅤ | 一本大道久久久久| 91在线精品一区二区| 青青草视频免费| 亚洲AV无码乱码| 五月天高清无码| 免费观看一级A片| 五月丁香婷中文| 国产秘精品区二区三区日本| 午夜免费视频| 亚洲免费观看高清完整版在线观| 99re6热在线精品视频功能| 伊人久久国产| 先锋影音男人资源站| 午夜福利码一区二区| 东方av在线免费观看| 败火老熟女ThePorn视频| 一本高清无码| 无码逼逼| 国产香蕉视频| 色综合一区二区| 午夜亚洲AⅤ无码高潮片苍井空| 国产激情视频在线观看| 一级A色情大片| 美女裸体网站国产| 国产av影视| 伊人影院久久| 99久久综合国产精品二区| 精品福利视频导航| 少妇bbb搡bbbb搡bbbb| 人妻人人妻| 婷婷五月激情网| 狠狠躁日日躁夜夜躁A片小说免费| 国产黄色片网站| 在线无码一区| 看肏屄视频| 婷婷黄色网| 免费黄色成人网站| 亚洲电影无码| 欧美性综合网| 大奶一区二区| 翔田千里AV在线| 亚洲少妇熟女| 中文无码网站| 玉米地一级婬片A片| 粉嫩av懂色av蜜臀av熟妇| 日日夜夜天天综合| 亚洲第一黄色| 天堂综合| 乱伦视频91| 五月天激情啪啪| 这里只有精品视频| 中文字幕23页| 一级香蕉视频| 日日Av| 91香蕉视频18| 日韩午夜福利| 国内精品内射| 婷婷丁香五月在线| 五月天黄色电影| 哪里可以看毛片| 国产一a毛一a免费观看| 乱人伦欲国语对白| 91香蕉视频在线| 亚洲男人天堂av| 亚洲九九视频| 竹菊av一区二区三区四区五区| 狠狠干高清成人二区三区| 超碰操逼| 久久婷婷综合网| 国产青草视频| 久久国产精品伦子伦| 欧洲精品在线观看| 人人插人人爽| 国产精品视频色| 一区二区精品视频| 欧美偷拍| 天堂网av在线| 精品免费在线观看| 免费成人在线看片黄| 久久久久久黄| 懂色成人Av| 国产综合久久| 国产美女自拍视频| 亚洲中文字幕在线看| 欧日韩在线| 51国产视频| 麻豆少妇| 四虎2025在线51| 天天干天天日天天干| 国产精品一卡二卡| 特级艺体西西444WWw| 西西4444大胆无码视频| 东京热av一区二区| 成人影片亚洲| 欧美级毛片高潮| 色婷婷久久综合久色| 一级特黄大片录像i| 国产成人a亚洲精品无码| 性中国熟妇| 免费的一级片| 国产伦精品一区二区三区妓女下载 | 欧洲操逼视频| 日韩免费视频观看| 久久国产一区| 三级A片视频| 色丁香五月| 女人的天堂网| 成人无码小电影| 国产在线在线| 色婷婷在线视频| 中文字幕的| 亚洲一级av| 成人在线视频播放| A视频在线免费观看| 91视频专区| 一区二区三区四区在线播放| 久99久视频| 四川美人搡BBw搡BBw| 成人精品一区二区三区无码视频| 老女人肏屄视频| 午夜福利免费在线观看| 国产一毛a一毛a在线观看| 99精品欲| 国产视频一区二区在线| 中文字幕三级av片| 日本在线播放| 欧美成人精品欧美一级乱黄| 欧美草逼视频| 无码一区二区三区在线| 久久99精品久久久久久| 亚洲午夜无码| 日韩一级电影在线观看| 免费看v片| 97狠狠| 日韩色网站| 国产肏逼视频| 人妻体内射精一区二区| 国产伊人大香蕉| 日韩在线综合| 麻豆mdapp01.tⅴ| 内射免费看| 蜜桃视频一区| 五月婷婷综合网| 亚洲精品91| 日本老妇操屄视频| 五月天婷婷操逼视频| 天天谢天天干| 久久狠狠干| 强奸五月天| 91亚洲国产成人精品一区二区三|