public void TryGetMethodInfo_GetsMethodInfo_IfControllerActionDescriptor() { var apiDescription = ApiDescriptionFactory.Create <FakeController>(c => nameof(c.ActionWithNoParameters), groupName: "v1", httpMethod: "POST", relativePath: "/"); var result = apiDescription.TryGetMethodInfo(out var methodInfo); Assert.True(result); Assert.NotNull(methodInfo); }
/// <summary> /// Remove Paths and Components from OpenApi documentation for specific controller without accepted roles. /// </summary> /// <param name="openApiDoc"><see cref="OpenApiDocument"/>.</param> /// <param name="acceptedRoles">Collection of accepted roles.</param> /// <returns> /// Returns <see cref="OpenApiDocument"/>. /// </returns> public static OpenApiDocument RemovePathsAndComponentsWithoutAcceptedRolesForController<TController>(this OpenApiDocument openApiDoc, IReadOnlyList<string> acceptedRoles) where TController : class { var paths = new Dictionary<(MethodInfo, Type), string>(); foreach (var methodInfo in typeof(TController).GetMethods().Where(m => !m.IsSpecialName)) { var actionDescriptor = ApiDescriptionFactory.Create<TController>(methodInfo, typeof(TController).GetCustomAttribute<RouteAttribute>().Template)?.ActionDescriptor; if (actionDescriptor != null) { paths.Add((((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)actionDescriptor).MethodInfo, typeof(TController)), actionDescriptor.AttributeRouteInfo.Template); } } HidePathsAndDefinitionsByRolesDocumentFilter.RemovePathsAndComponents(openApiDoc, paths, openApiDoc.Components.Schemas, acceptedRoles); return openApiDoc; }
/// <summary> /// Remove Paths and Components from OpenApi documentation for specific controller action without accepted roles. /// </summary> /// <param name="openApiDoc"><see cref="OpenApiDocument"/>.</param> /// <param name="actionNameSelector">Action name selector.</param> /// <param name="acceptedRoles">Collection of accepted roles.</param> /// <returns> /// Returns <see cref="OpenApiDocument"/>. /// </returns> public static OpenApiDocument RemovePathsAndComponentsWithoutAcceptedRolesFor<TController>(this OpenApiDocument openApiDoc, Func<TController, string> actionNameSelector, IReadOnlyList<string> acceptedRoles) where TController : class, new() { var actionDescriptor = ApiDescriptionFactory.Create(actionNameSelector, typeof(TController).GetCustomAttribute<RouteAttribute>().Template)?.ActionDescriptor; if (actionDescriptor != null) { var paths = new Dictionary<(MethodInfo, Type), string> { { (((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)actionDescriptor).MethodInfo, typeof(TController)), actionDescriptor.AttributeRouteInfo.Template } }; HidePathsAndDefinitionsByRolesDocumentFilter.RemovePathsAndComponents(openApiDoc, paths, openApiDoc.Components.Schemas, acceptedRoles); } return openApiDoc; }
public void Apply_CreatesMetadataForControllerNameTag_FromSwaggerTagAttribute() { var document = new OpenApiDocument(); var apiDescription = ApiDescriptionFactory.Create <FakeControllerWithSwaggerAnnotations>(c => nameof(c.ActionWithNoAttributes)); var filterContext = new DocumentFilterContext( apiDescriptions: new[] { apiDescription }, schemaGenerator: null, schemaRepository: null); Subject().Apply(document, filterContext); var tag = document.Tags.Single(t => t.Name == "FakeControllerWithSwaggerAnnotations"); Assert.Equal("Description for FakeControllerWithSwaggerAnnotations", tag.Description); Assert.Equal("http://tempuri.org/", tag.ExternalDocs.Url.ToString()); }