如何使用Swashbuckle.AspNetCore.Swagger

问题描述

我的项目引用了以下软件包;

  1. Swashbuckle.AspNetCore.Filters v6.0.0
  2. Swashbuckle.AspNetCore.Swagger v5.6.3
  3. Swashbuckle.AspNetCore.SwaggerGen v5.6.3
  4. Swashbuckle.AspNetCore.SwaggerNewtonSoft v5.6.3
  5. Microsoft.AspNetCore.OData v7.5.0

问题出在这里:

我有一个名为“ TestController”的控制器。其中有一个名为Test的[HttpGet]方法。

该方法的装饰如下;

[HttpGet]
[SwaggerOperation(OperationId = nameof(Test))]
public IActionResult Test([FromQuery] string id,[FromQuery] ODataQueryOptions<SearchOptions> oData)
{
    // ...
}

由于我使用的是Swashbuckle,因此预期结果应该是有一个名为 Test 的get方法,并将一堆查询参数返回到文档UI。

但是,我看到一个例外。例外说明;

Failed to generate Scheme for type - ODataQueryOptions<`T>. See inner exception

检查内部异常表明,swagger正在尝试构建看起来像一堆系统类型(例如HttpContext,响应,请求等)的方案。

我相信这种情况正在发生,因为ODataQueryOption 类带有许多上下文属性,以帮助简化URI解析。

在此处查看有关该课程的更多信息:https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnet.odata.query.odataqueryoptions?view=odata-aspnetcore-7.0

异常和Google随机搜索使我沿着添加自定义IOperationFilter,ISchemeFilters和IParameterFilters(这些都是Swagger特定的配置“过滤器”)的路径。

我试图通过将属性设置为null来完全删除该操作。我已经尝试过使用Scheme和Parameter过滤器进行相同的操作...一切都没有运气。没有文档可以帮助...

我的尝试示例:

class ParamFilter : IParameterFilter {
    public void Apply(OpenApiParameter parameter,ParameterFilterContext context) {
        parameter.Scheme = null;
        parameter.Reference = null;
    }
}

class SchemeFilter : ISchemeFilter {
    public void Apply(OpenApiScheme scheme,SchemeFilterContext context) {
        scheme.Items = null;
        scheme.Reference = null;
        scheme.Reference = null;
    }
}

// Note: this never gets hit by the debugger. App throws exception before invocation.
class OperationFilter : IOperationFilter {
    public void Apply(OpenApiOperation operation,OperationFilterContext context) {
        operation.Parameters.clear()
    }
}

没有任何效果。同样的例外。

这时我的问题很简单;

如何从不可靠的文档生成中删除 ODataQueryOption 参数?

编辑:添加异常消息

  • 无法为类型-Microsoft.AspNet.OData.Query.ODataQueryOptions`1 [SearchOptions]生成架构。 查看内部异常
  • 无法为类型生成架构- Microsoft.AspNetCore.Http.HttpRequest。查看内部异常
  • 无法为类型生成架构- Microsoft.AspNetCore.Http.HttpContext。查看内部异常
  • 无法为类型生成架构- Microsoft.AspNetCore.Http.Authentication.AuthenticationManager。看到 内部异常
  • 无法加载类型 'Microsoft.AspNetCore.Http.Features.Authentication.AuthenticateContext' 来自程序集'Microsoft.AspNetCore.Http.Features,Version = 3.1.8.0, 文化=中性,PublicKeyToken = adb9793829ddae60'。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)