Эта библиотека содержит коллекцию помощников, моделей и методов расширения, которые помогают сократить время и усилия по улучшению 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, это создаст маршрут по умолчанию «корневой/домашний» => 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:
Имена свойств CamelCase.
Отступное форматирование.
Игнорируйте нулевые свойства, имеющие значения.
Перечисления отображаются как string
... а не как числовые значения.
Можно указать собственный шаблон формата DateTime.
// 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"
}
Обратите внимание на форматирование DateTime в .NET Core по умолчанию.
По умолчанию используется формат ISO 8601-1:2019. Это значит, что если есть какие-то микросекунды, то они рендерятся. Если его нет -> микросекунды не отображаются. Это может затруднить работу некоторых потребителей этих данных (например, приложений iOS Swift, использующих API .NET Core), поэтому вы можете жестко запрограммировать определенный шаблон формата для получения согласованного вывода.
OpenAPI (с использованием библиотеки Swashbuckle) подключен и позволяет вам определить title
и version
этого API, а также настраиваемый route prefix
(что хорошо для API шлюза с несколькими конечными точками OpenAPI, поскольку каждый микросервис имеет свой собственный документ 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.
Да, обратитесь к странице со вкладом, чтобы узнать, как лучше оставить отзыв — хороший или требующий улучшения :)