Esta biblioteca contiene una colección de ayudas, modelos y métodos de extensión que ayudan a reducir el tiempo y la ceremonia para mejorar una API WebApi/RESTful de ASP.NET-Core MVC.
Esto agrega todos los elementos, usando la configuración predeterminada (como se enumera a continuación). Sencillo, rápido y espectacular.
Añade ambos.
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();
}
o una versión más personalizada:
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);
}
De lo contrario, puede elegir qué elementos desea.
Excelente para las API, esto creará la ruta predeterminada "raíz/inicio" => HTTP GET /
con:
Banner opcional: algo de texto (como ASCII ART)
Generar información sobre un ensamblaje.
public void ConfigureServices(IServiceCollection services)
{
var someASCIIArt = "... blah .."; // Optional.
services.AddControllers()
.AddAHomeController(services, someASCIIArt);
}
Por ejemplo, salida
___ ___ ___ ___ ___ ___ ___ ___
/__ / / /__ / / / / ___
/:/ / /:: /:: /::| | /:: : /:: /:: /
/:/__/ /:/: /:/: /:|:| | /:/: : /:/: /:/: :
/:: ___ /:/ : /::~: /:/|:| |__ /::~: /:: /::~: /::~: /::__
/:/: /__ /:/__/ :__ /:/: :__ /:/ |:| /__ /:/: :__ /:/:__ /:/: :__ /:/: :__ __/://__/
/__:/:/ / : /:/ / /_|::/:/ / /__|:|/:/ / :~: /__/ /:/ /__/ /__:/:/ / /__:/:/ / //:/ /
::/ / : /:/ / |:|::/ / |:/:/ / : :__ /:/ / ::/ / ::/ / ::/__/
/:/ / :/:/ / |:|/__/ |::/ / : /__/ /__/ /:/ / /__/ :__
/:/ / ::/ / |:| | /:/ / :__ /:/ / /__/
/__/ /__/ |__| /__/ /__/ /__/
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
Todas las respuestas son JSON y están formateadas usando la configuración JSON común:
Nombres de propiedad de CamelCase.
Formato con sangría.
Ignore las propiedades nulas que tengan valores.
Las enumeraciones se representan como string
... no como su valor numérico de respaldo.
Puede especificar una plantilla de formato DateTime personalizada.
// 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);
}
Modelo de muestra/objeto de dominio:
new FakeVehicle
{
Id = 1,
Name = "Name1",
RegistrationNumber = "RegistrationNumber1",
Colour = ColourType.Grey,
VIN = null
});
Texto JSON del resultado:
{
"id": 1,
"name": "Name1",
"registrationNumber": "RegistrationNumber1",
"colour": "Grey"
}
Nota sobre el formato DateTime predeterminado de .NET Core.
De forma predeterminada, utiliza el formato ISO 8601-1:2019. Esto significa que si hay algunos microsegundos, se representan. Si no hay ninguno -> no se procesan micras de segundo. Esto podría dificultar que algunos consumidores de estos datos (por ejemplo, aplicaciones iOS Swift que consumen una API .NET Core) puedan codificar una plantilla de formato específica para obtener un resultado consistente.
OpenAPI (que utiliza la biblioteca Swashbuckle) se ha conectado y le permite definir el title
y version
de esta API y también un route prefix
personalizado (lo cual es bueno para una API de puerta de enlace con múltiples puntos finales de OpenAPI porque cada microservicio tiene su propio documento de 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());
}
Se recomiendan debates y solicitudes de extracción :) Haga todas las preguntas generales en este repositorio o elija un repositorio especializado para problemas específicos y específicos. También tenemos un documento de contribución que detalla cómo hacer esto.
Sí, también tenemos un código de conducta que se aplica a todos los repositorios de la organización (GitHub) Homely.
Sí, consulte la página de contribuciones sobre la mejor manera de brindar comentarios, ya sean buenos o que necesiten mejorar :)