I have to set a WebApi project (in .NET Framework 4.6.1) written in VB.NET and i want to setup Nswag and Swagger for further implementation. I look for that guide: enter link description here and all of my C# webapi projects works well
I'm trying setup in VB.NET converting the code like that:
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
End Module
But when i run the project pop up that error:
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
setting the error on line 28 of my code that correspond for RouteTable.Routes.MapOwinPath("swagger", Function(app)
Any Suggestion?
I found out that VB.NET lamba functions must have specified the type they return like so:
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)
notice that I add As Owin.IAppBuilder and As SwaggerUi3Settings(Of NSwag.Generation.WebApi.WebApiOpenApiDocumentGeneratorSettings)