该库包含一系列帮助程序、模型和扩展方法,有助于减少改进 ASP.NET-Core MVC WebApi/RESTful API 的时间和仪式。
这将使用默认设置(如下所列)添加所有项目。简单、快速、很棒。
添加这两个。
public void ConfigureServices(IServiceCollection services)
{
// - Home controller but no banner.
// - Default json options: camel casing, no indention, nulls ignored and enums as strings.
// - OpenApi adeed.
services.AddControllers()
.AddDefaultWebApiSettings(); // Can also be totally customized.
}
public void Configure(IApplicationBuilder app)
{
// - Problem details
// - OpenAPI
// - Authorisation
// - Endpoints (with MapControllers)
app.UseDefaultWebApiSettings();
}
或更定制的版本:
public void ConfigureServices(IServiceCollection services)
{
// - Home controller but no banner.
// - Default json options: camel casing, no indention, nulls ignored and enums as strings.
// - OpenApi adeed.
var banner = " -- ascii art --";
var isStackTraceDisplayed = _webHostEnvironment.IsDevelopment();
var isJsonIndented = _webHostEnvironment.IsDevelopment();
var jsonDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ" // No milliseconds.
var openAPITitle = "My API";
var openAPIVersion = "v1";
var openAPICustomOperationIdSelector = new Func<ApiDescription, string>((apiDescrption, string) => { .. // refer to sample code in website } );
services.AddControllers()
.AddDefaultWebApiSettings(banner,
isStackTraceDisplayed,
isJsonIndented,
jsonDateTimeFormat,
openAPITitle,
openAPIVersion,
openAPICustomOperationIdSelector)
}
public void Configure(IApplicationBuilder app)
{
// - Problem details
// - OpenAPI (Customised)
// - Authorisation
// - Endpoints (with MapControllers)
var useAuthorizatoin = true;
var openAPITitle = "My API";
var openAPIVersion = "v1";
var openAPIRoutePrefix = "swagger";
app.UseDefaultWebApiSettings(useAuthorization,
openAPITitle,
openAPIVersion,
openAPIRoutePrefix);
}
否则,您可以挑选您想要的项目。
非常适合 API,这将创建默认的“root/home”路由 => HTTP GET /
:
可选横幅 - 一些文本(如 ASCII ART)
构建有关程序集的信息。
public void ConfigureServices(IServiceCollection services)
{
var someASCIIArt = "... blah .."; // Optional.
services.AddControllers()
.AddAHomeController(services, someASCIIArt);
}
例如输出
___ ___ ___ ___ ___ ___ ___ ___
/__ / / /__ / / / / ___
/:/ / /:: /:: /::| | /:: : /:: /:: /
/:/__/ /:/: /:/: /:|:| | /:/: : /:/: /:/: :
/:: ___ /:/ : /::~: /:/|:| |__ /::~: /:: /::~: /::~: /::__
/:/: /__ /:/__/ :__ /:/: :__ /:/ |:| /__ /:/: :__ /:/:__ /:/: :__ /:/: :__ __/://__/
/__:/:/ / : /:/ / /_|::/:/ / /__|:|/:/ / :~: /__/ /:/ /__/ /__:/:/ / /__:/:/ / //:/ /
::/ / : /:/ / |:|::/ / |:/:/ / : :__ /:/ / ::/ / ::/ / ::/__/
/:/ / :/:/ / |:|/__/ |::/ / : /__/ /__/ /:/ / /__/ :__
/:/ / ::/ / |:| | /:/ / :__ /:/ / /__/
/__/ /__/ |__| /__/ /__/ /__/
S E R V I C E -> A C C O U N T S
Name: ApiGateway.Web
Version: 3.1.0.0
Build Date : Sunday, 7 June 2020 2:41:53 PM
Application Started: Monday, 8 June 2020 12:02:37 PM
Server name: PUREKROME-PC
所有响应均为 JSON,并使用通用 JSON 设置进行格式化:
驼峰命名法属性名称。
缩进格式。
忽略具有值的 null 属性。
枚举呈现为string
的...而不是它们的支持数字值。
可以指定自定义日期时间格式模板。
// Simplest : i
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddDefaultJsonOptions();
}
or
// All options...
public void ConfigureServices(IServiceCollection services)
{
var isIndented = true;
string dateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ" // No milliseconds.
services.AddControllers()
.AddDefaultJsonOptions(isIndented, dateTimeFormat);
}
示例模型/域对象:
new FakeVehicle
{
Id = 1,
Name = "Name1",
RegistrationNumber = "RegistrationNumber1",
Colour = ColourType.Grey,
VIN = null
});
结果 JSON 文本:
{
"id": 1,
"name": "Name1",
"registrationNumber": "RegistrationNumber1",
"colour": "Grey"
}
请注意默认的 .NET Core DateTime 格式。
默认情况下,它使用 ISO 8601-1:2019 格式。这意味着如果有几微秒,那么它们就会被渲染。如果没有 -> 则不会渲染任何微秒。这可能会让某些数据使用者(例如使用 .NET Core API 的 iOS Swift 应用程序)变得困难,因此您可以对特定格式模板进行硬编码以获得一致的输出。
OpenAPI(使用 Swashbuckle 库)已连接,允许您定义此 API 的title
和version
以及自定义route prefix
(这对于具有多个 OpenAPI 端点的网关 API 很有用,因为每个微服务都有自己的 OpenAPI 文档)。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddCustomOpenApi("Test API", "v2");
}
public void Configure(IApplicationBuilder app)
{
app.UseCustomOpenApi("accounts/swagger", "Test API", "v2")
.UseRouting()
.UseEndpoints(endpoints => endpoints.MapControllers());
}
鼓励讨论和拉取请求:) 请询问此存储库中的所有一般性问题,或为特定的、有针对性的问题选择一个专门的存储库。我们还有一份贡献文档,详细介绍了如何做到这一点。
是的,我们还有适用于 (GitHub) Homely 组织中所有存储库的行为准则。
是的,请参阅贡献页面了解如何最好地提供反馈 - 好的反馈或需要改进的反馈:)