问题描述
我的项目引用了以下软件包;
- Swashbuckle.AspNetCore.Filters v6.0.0
- Swashbuckle.AspNetCore.Swagger v5.6.3
- Swashbuckle.AspNetCore.SwaggerGen v5.6.3
- Swashbuckle.AspNetCore.SwaggerNewtonSoft v5.6.3
- 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 (将#修改为@)