vb.net - 无法在我的 vb.net webapi 项目中设置 Nswag
问题描述
我必须设置一个用 VB.NET 编写的 WebApi 项目(在 .NET Framework 4.6.1 中),并且我想设置 Nswag 和 Swagger 以进一步实施。我正在寻找该指南:在此处输入链接描述,我的所有 C# webapi 项目都运行良好
我正在尝试在 VB.NET 中设置这样的代码:
Public Module WebApiConfig
Public Sub Register(ByVal config As HttpConfiguration)
' Servizi e configurazione dell'API Web
' Route dell'API Web
config.MapHttpAttributeRoutes()
config.Routes.MapHttpRoute(
name:="DefaultApi",
routeTemplate:="api/{controller}/{action}/{id}",
defaults:=New With {.id = RouteParameter.Optional}
)
config.MessageHandlers.Add(New TokenValidationHandler())
Dim appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(Function(t) t.MediaType = "application/xml")
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType)
RouteTable.Routes.MapOwinPath("swagger", Function(app)
app.UseSwaggerUi3(GetType(WebApiApplication).Assembly, Function(settings)
settings.MiddlewareBasePath = "/swagger"
settings.GeneratorSettings.DefaultUrlTemplate = "api/{controller}/{action}/{id}"
settings.GeneratorSettings.OperationProcessors.Add(New OperationSecurityScopeProcessor("JWT Token"))
settings.GeneratorSettings.DocumentProcessors.Add(New SecurityDefinitionAppender("JWT Token",
New NSwag.OpenApiSecurityScheme With
{
.Type = NSwag.OpenApiSecuritySchemeType.ApiKey,
.Name = "Authorization",
.Description = "Copy 'Bearer ' + valid JWT token into field",
.[In] = NSwag.OpenApiSecurityApiKeyLocation.Header
}))
End Function)
End Function)
End Sub
端模块
但是当我运行项目时弹出该错误:
No conversion available between VB$AnonymousDelegate_0`2[System.Object,System.Object] and System.Func`2[System.Collections.Generic.IDictionary`2[System.String,System.Object],System.Threading.Tasks.Task]. Parameter name: signature
在我的代码的第 28 行设置与 RouteTable.Routes.MapOwinPath("swagger", Function(app) 相对应的错误
有什么建议吗?
解决方案
我发现 VB.NET lamba 函数必须指定它们返回的类型,如下所示:
RouteTable.Routes.MapOwinPath("swagger", Function(app) As Owin.IAppBuilder
Return app.UseSwaggerUi3(GetType(WebApiApplication).Assembly, Function(settings) As SwaggerUi3Settings(Of NSwag.Generation.WebApi.WebApiOpenApiDocumentGeneratorSettings)
settings.MiddlewareBasePath = "/swagger"
settings.GeneratorSettings.DefaultUrlTemplate = "api/{controller}/{action}/{id}"
settings.GeneratorSettings.OperationProcessors.Add(New OperationSecurityScopeProcessor("JWT Token"))
settings.GeneratorSettings.DocumentProcessors.Add(New SecurityDefinitionAppender("JWT Token",
New NSwag.OpenApiSecurityScheme With
{
.Type = NSwag.OpenApiSecuritySchemeType.ApiKey,
.Name = "Authorization",
.Description = "Copy 'Bearer ' + valid JWT token into field",
.[In] = NSwag.OpenApiSecurityApiKeyLocation.Header
}))
Return settings
End Function)
End Function)
请注意,我添加了 As Owin.IAppBuilder 和 As SwaggerUi3Settings(Of NSwag.Generation.WebApi.WebApiOpenApiDocumentGeneratorSettings)
推荐阅读
- python - 使用 pandas/numpy 按 bin 边界平滑
- javascript - 将包含分隔符的文本粘贴到 Vuetify 组合框中不会相应地分隔芯片分隔符吗?
- javascript - Vuetify - 第一个按键事件值始终为空字符串
- java - 如何在 Java 8 中迭代列表并在其中分组值
- javascript - javascript - 如何根据键对对象列表进行分组并合并结果
- javascript - Puppeteer:使用 cookie 横幅接受多个网站中的所有 cookie
- javascript - TypeError:无法读取 null 的属性“x”
- java - 如何按 dynamodb 上的多个字段排序(任何解决方法)?
- java - 杰克逊(反)序列化在 HTTP 响应和测试用例之间不准确
- gatling - Blazemeter 中的 Gatling 测试创建 ClassNotFoundException