Fixed apiexplorer

This commit is contained in:
2019-10-18 19:34:46 +00:00
parent c5bd733302
commit 8fdc54ab6a
24 changed files with 102 additions and 81 deletions

View File

@@ -32,11 +32,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Attachment controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class AttachmentController : Controller
public class AttachmentController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<AttachmentController> log;

View File

@@ -19,10 +19,11 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Authentication controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
public class AuthController : Controller
public class AuthController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<AuthController> log;

View File

@@ -15,11 +15,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Enum pick list controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class AyaEnumPickListController : Controller
public class AyaEnumPickListController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<AyaTypeController> log;

View File

@@ -15,11 +15,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// AyaType list controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class AyaTypeController : Controller
public class AyaTypeController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<AyaTypeController> log;

View File

@@ -1,24 +1,9 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Logging;
using AyaNova.Models;
using AyaNova.Api.ControllerHelpers;
using AyaNova.Util;
using System.Globalization;
using System.IO;
using System.Text;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Net.Http.Headers;
using System.Collections.Generic;
using System.Linq;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -34,7 +19,7 @@ using System.Linq;
namespace AyaNova.Api.Controllers
{
//FROM DOCS HERE:
//https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads#uploading-large-files-with-streaming
@@ -46,11 +31,12 @@ namespace AyaNova.Api.Controllers
/// and triggering a restore from backup
///
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class BackupController : Controller
public class BackupController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<BackupController> log;

View File

@@ -19,11 +19,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
///
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class DataFilterController : Controller
public class DataFilterController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<DataFilterController> log;

View File

@@ -19,10 +19,11 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Log files controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Authorize]
public class EventLogController : Controller
public class EventLogController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<LogFilesController> log;

View File

@@ -18,12 +18,13 @@ namespace AyaNova.Api.Controllers
/// <summary>
///
/// </summary>
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class FormCustomController : Controller
public class FormCustomController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<FormCustomController> log;

View File

@@ -28,12 +28,13 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Import AyaNova 7 data controller
/// </summary>
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class ImportAyaNova7Controller : Controller
public class ImportAyaNova7Controller : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<ImportAyaNova7Controller> log;

View File

@@ -17,11 +17,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// JobOperations controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class JobOperationsController : Controller
public class JobOperationsController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<JobOperationsController> log;

View File

@@ -15,12 +15,13 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// License route
/// </summary>
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class LicenseController : Controller
public class LicenseController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<LicenseController> log;

View File

@@ -23,11 +23,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Localized text controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class LocaleController : Controller
public class LocaleController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<LocaleController> log;

View File

@@ -16,11 +16,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Log files controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
//[Produces("application/json")]
[Authorize]
public class LogFilesController : Controller
public class LogFilesController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<LogFilesController> log;

View File

@@ -18,10 +18,11 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Log files controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Authorize]
public class MetricsController : Controller
public class MetricsController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<LogFilesController> log;

View File

@@ -19,11 +19,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Search
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class SearchController : Controller
public class SearchController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<WidgetController> log;

View File

@@ -15,10 +15,11 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Server state controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
public class ServerStateController : Controller
public class ServerStateController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<ServerStateController> log;

View File

@@ -15,11 +15,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Enum pick list controller
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class TagListController : Controller
public class TagListController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<AyaTypeController> log;

View File

@@ -13,11 +13,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
///Test controller class used during development
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class TrialController : Controller
public class TrialController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<WidgetController> log;

View File

@@ -19,11 +19,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// User
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class UserController : Controller
public class UserController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<UserController> log;

View File

@@ -19,11 +19,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// UserOptions
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class UserOptionsController : Controller
public class UserOptionsController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<UserOptionsController> log;

View File

@@ -22,11 +22,12 @@ namespace AyaNova.Api.Controllers
/// <summary>
/// Sample controller class used during development for testing purposes
/// </summary>
[ApiController]
[ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[Produces("application/json")]
[Authorize]
public class WidgetController : Controller
public class WidgetController : ControllerBase
{
private readonly AyContext ct;
private readonly ILogger<WidgetController> log;

View File

@@ -149,23 +149,30 @@ namespace AyaNova
// Add service and create Policy with options
_log.LogDebug("BOOT: init CORS service");
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
//.AllowCredentials()
);
});
#region Swagger
// services
// .AddApiVersioning(options =>
// {
// options.AssumeDefaultVersionWhenUnspecified = true;
// options.DefaultApiVersion = Microsoft.AspNetCore.Mvc.ApiVersion.Parse("8.0");
// options.ReportApiVersions = true;
// });
// services.AddVersionedApiExplorer(o => o.GroupNameFormat = "'v'VVV");
services.AddApiVersioning();
services
.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = Microsoft.AspNetCore.Mvc.ApiVersion.Parse("8.0");
options.ReportApiVersions = true;
});
services.AddVersionedApiExplorer(options => options.GroupNameFormat = "'v'VVV");
// services.AddSwaggerGen(
@@ -184,8 +191,32 @@ namespace AyaNova
// return versions.Any(v => $"v{v.ToString()}" == docName);
// });
// });
services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();
services.AddSwaggerGen();
services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();
services.AddSwaggerGen(
c=>{
//https://stackoverflow.com/questions/56234504/migrating-to-swashbuckle-aspnetcore-version-5
//First we define the security scheme
c.AddSecurityDefinition("Bearer", //Name the security scheme
new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme.",
Type = SecuritySchemeType.Http, //We set the scheme type to http since we're using bearer authentication
Scheme = "bearer" //The name of the HTTP Authorization scheme to be used in the Authorization header. In this case "bearer".
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement{
{
new OpenApiSecurityScheme{
Reference = new OpenApiReference{
Id = "Bearer", //The name of the previously defined security scheme.
Type = ReferenceType.SecurityScheme
}
},new List<string>()
}
});
}
);
#endregion
@@ -349,30 +380,8 @@ namespace AyaNova
#region SWAGGER
_log.LogDebug("BOOT: pipeline - api explorer");
// Enable middleware to serve generated Swagger as a JSON endpoint.
// app.UseSwagger();
// app.UseSwaggerUI(c =>
// {
// // build a swagger endpoint for each discovered API version
// foreach (var description in provider.ApiVersionDescriptions)
// {
// c.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
// }
// //clean up the swagger explorer UI page and remove the branding
// //via our own css
// //NOTE: this broke when updated to v2.x of swagger and it can be fixed according to docs:
// //https://github.com/domaindrivendev/Swashbuckle.AspNetCore#inject-custom-css
// // c.InjectStylesheet("/api/sw.css");
// c.DefaultModelsExpandDepth(-1);
// c.DocumentTitle = "AyaNova API explorer";
// c.RoutePrefix = "api-docs";
// });
app.UseSwagger();
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
app.UseSwaggerUI(
options =>
{
@@ -382,8 +391,9 @@ namespace AyaNova
$"/swagger/{description.GroupName}/swagger.json",
description.GroupName.ToUpperInvariant());
}
options.DefaultModelsExpandDepth(-1);//This is meant to hide the Models section that would appear at the bottom of the swagger ui showing *all* models from the api
options.DocumentTitle = "AyaNova API explorer";
options.RoutePrefix = "api-docs";
options.RoutePrefix = "api-docs";
});