/// <summary> /// Allows agent configuration by specifying a custom middleware /// </summary> /// <remarks>Requires corresponding call to AddAriesOpenApi in ConfigureServices</remarks> /// <param name="aApplicationBuilder">App.</param> public static void UseAriesOpenApi(this IApplicationBuilder aApplicationBuilder) { AriesOpenApiOptions ariesOpenApiOptions = aApplicationBuilder.ApplicationServices.GetRequiredService <AriesOpenApiOptions>(); if (ariesOpenApiOptions.UseSwaggerUi) { aApplicationBuilder .UseSwagger ( aSwaggerOptions => aSwaggerOptions.RouteTemplate = $"{ariesOpenApiOptions.RoutePrefix}/{{documentname}}/swagger.json" ); // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), // specifying the Swagger JSON endpoint. aApplicationBuilder.UseSwaggerUI ( aSwaggerUIOptions => { aSwaggerUIOptions.SwaggerEndpoint(ariesOpenApiOptions.SwaggerEndPoint, ariesOpenApiOptions.SwaggerApiTitle); aSwaggerUIOptions.RoutePrefix = ariesOpenApiOptions.RoutePrefix; } ); } //aApplicationBuilder.UseRouting(); //aApplicationBuilder.UseEndpoints(aEndpointRouteBuilder => aEndpointRouteBuilder.MapControllers()); }
private static void ConfigureSwagger ( IServiceCollection aServiceCollection, AriesOpenApiOptions aAriesOpenApiOptions ) { aServiceCollection.AddSwaggerGen ( aSwaggerGenOptions => { aSwaggerGenOptions .SwaggerDoc ( SwaggerVersion, new OpenApiInfo { Title = aAriesOpenApiOptions.SwaggerApiTitle, Version = SwaggerVersion } ); aSwaggerGenOptions.EnableAnnotations(); string xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; string xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); aSwaggerGenOptions.IncludeXmlComments(xmlPath); xmlFile = $"{typeof(BaseRequest).Assembly.GetName().Name}.xml"; xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); aSwaggerGenOptions.IncludeXmlComments(xmlPath); xmlFile = $"{typeof(BaseEndpoint<,>).Assembly.GetName().Name}.xml"; xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); aSwaggerGenOptions.IncludeXmlComments(xmlPath); aSwaggerGenOptions.AddFluentValidationRules(); aSwaggerGenOptions .OrderActionsBy ( aApiDescription => $"{aApiDescription.GroupName}{aApiDescription.HttpMethod}" + $"{aApiDescription.RelativePath.Contains("{")}{aApiDescription.RelativePath}" ); } ); }
/// <summary> /// Register Aries Open Api services /// </summary> /// <param name="aMvcBuilder"></param> /// <param name="aConfigureAriesOpenApiOptionsAction"></param> public static IMvcBuilder AddAriesOpenApi ( this IMvcBuilder aMvcBuilder, Action <AriesOpenApiOptions> aConfigureAriesOpenApiOptionsAction = null ) { IServiceCollection serviceCollection = aMvcBuilder.Services; bool hasAlreadyBeenRun = serviceCollection.Any(aServiceDescriptor => aServiceDescriptor.ServiceType == typeof(AriesOpenApiOptions)); if (hasAlreadyBeenRun) { return(aMvcBuilder); } var ariesOpenApiOptions = new AriesOpenApiOptions(); aConfigureAriesOpenApiOptionsAction?.Invoke(ariesOpenApiOptions); aMvcBuilder .AddApplicationPart(typeof(AriesOpenApiOptions).Assembly); ConfigureFluentValidationServices(serviceCollection); serviceCollection.Configure <ApiBehaviorOptions> ( aApiBehaviorOptions => aApiBehaviorOptions.SuppressInferBindingSourcesForParameters = true ); serviceCollection.AddMediatR(typeof(BaseError).Assembly); ConfigureAriesOpenApiOptions(serviceCollection, ariesOpenApiOptions); if (ariesOpenApiOptions.UseSwaggerUi) { ConfigureSwagger(serviceCollection, ariesOpenApiOptions); } return(aMvcBuilder); }
private static string ConfigureAriesOpenApiOptions(IServiceCollection aServiceCollection, AriesOpenApiOptions aAriesOpenApiOptions) { aAriesOpenApiOptions.SwaggerApiTitle = $"Aries Open API {SwaggerVersion}"; aAriesOpenApiOptions.RoutePrefix = $"{BaseRequest.BaseUri}swagger"; aAriesOpenApiOptions.SwaggerEndPoint = $"/{aAriesOpenApiOptions.RoutePrefix}/{SwaggerVersion}/swagger.json"; aServiceCollection.AddSingleton <AriesOpenApiOptions>(aAriesOpenApiOptions); return(SwaggerVersion); }