无法使用自定义基本控制器创建 swagger.json [英] Unable to create swagger.json with custom base controller
问题描述
我有一个名为SampleController"的控制器,它使用MyControllerBase"(来自 NuGet 包)作为基类.
I have a controller say 'SampleController' that uses 'MyControllerBase'(from a NuGet package) as a base class.
我正在尝试使用 swagger 添加 API 文档,但 swagger 无法获取SampleController",因此无法创建 swagger.json.
I am trying to add API documentation using swagger but the swagger is unable to fetch 'SampleController' thus cannot create swagger.json.
我收到错误获取错误:/swagger/v1/swagger.json"
I am getting the error "fetch error: /swagger/v1/swagger.json"
'MyControllerBase' 继承了 'ControllerBase',因此 'SampleController' 可以作为 API 工作.
'MyControllerBase' inherits 'ControllerBase' so 'SampleController' is working as an API should work.
如何告诉 swagger 使用MyControllerBase"来查找控制器
How can I tell swagger to use 'MyControllerBase' to find Controllers
来自 Nuget 包:
From Nuget Package:
namespace My.ApiFormatter.Controller
{
public abstract class MyControllerBase<T> : ControllerBase, IFilterableController
{
public virtual Dictionary<string, IFilterMapper> FilterWhitelist => new Dictionary<string, IFilterMapper>();
}
}
实施:
[Route("api/[controller]")]
[ApiController]
public class SampleController : MyControllerBase<ExampleData>
{
[HttpGet]
public override ActionResult<CollectionEnvelope<ExampleData>> GetAll()
{
var results = ExampleDatas
.Where(x => x.Key > (Info.PageSize * Info.SkipPages)
&& x.Key <= (Info.PageSize * (Info.SkipPages + 1)))
.Select(y => y.Value).ToList();
var collectionEnvelope = GetCollectionEnvelope(results, ExampleDatas.Count);
return Ok(collectionEnvelope);
}
}
推荐答案
Swagger 只会将方法作为基类中的控制器获取.您可能会收到错误消息,因为 swagger 认为任何公共方法都是一个端点.使不受端点保护的方法和属性
Swagger will just get the methods as controllers in the base class. You are probably getting the error, because swagger thinks any public method is an endpoint. Make the methods and properties that aren't endpoints protected
这篇关于无法使用自定义基本控制器创建 swagger.json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!