我似乎无法理解为什么我的招摇的文档UI缺少控制器中每个Gets和Posts的Model Schema详细信息?
我正在为ASP.NET核心nuget程序包v4.0.1运行SwashBuckle
,即使升级到最新程序包后也没有任何显示架构详细信息的信息? (我的WebAPI是在Core 2.2中构建的)
我仅通过招摇过的文档进行了w.r.t的配置,没有什么可引导我到达可以显示其他信息的位置?
经过一番研究,我发现如果我使用以下属性
[ProducesResponseType(typeof(Models.Customer), StatusCodes.Status200OK)]
[HttpGet("{Id}/customer")]
public async Task<IActionResult> GetCustomer(int Id)
正是在我想要的swagger UI中显示Schemas
块。但是我不想经历我的每个Controller Get / Post方法都添加了此属性。它总是可以在没有此功能的情况下工作,但是有什么可能阻止此功能开箱即用?
因此,您的方法是返回IActionResult,这是很常见的事情,编译器无法找出将返回的实际结果。这就是为什么您应该使用ProducesResponseType。
如果要使用IActionResult和Asp.Net MVC控制器,则可以使用这种方式。
但是还有一点:您真的需要Asp.Net MVC控制器吗?并且,如果您需要Asp.Net MVC控制器,为什么要创建庞大的文档?这件事是矛盾的。
Swagger需要创建Public Api文档。为外部程序员增加使用您的API的可能性。在这种情况下,最好使用Api控制器。
如果您需要使用具有Autorization等功能的Asp.Net MVC控制器,则无需创建Swagger,因为它应在您自己的项目中使用。
Swashbuckle根据操作的返回类型创建模型。您有几种选择:
您可以返回实际类型(例如public async Task<Models.Customer> GetCustomer(int Id)
如果返回IActionResult
,则可以使用ProducesResponseType
属性
您可以返回一个ActionResult<T>
,其作用与IActionResult
相似,但实际类型为
您可以查看文档以获取更多信息:https://docs.microsoft.com/en-us/aspnet/core/web-api/action-return-types?view=aspnetcore-3.1