-
Notifications
You must be signed in to change notification settings - Fork 59
Open
Description
Expected Behavior
When I specify the Name and custom Path parameters in the Route() attribute both are used to generate the swagger file
Actual Behavior
When Name is specified the custom Path is ignored.
Steps to Reproduce the Problem
- Create a Nancy method, e.g.:
public class TestModule: NancyModule
{
public TestModule()
{
Get("/test/{param:guid}", ctx => AMethod(ctx.param), name: "AMethod");
}
[Route("AMethod")]
[Route(HttpMethod.Get, "/test/{param}")]
[RouteParam(ParameterIn.Path, Name = "param", ParamType = typeof(Guid), Required = true)]
private object AMethod(Guid param) => param.ToString();
}
- Generate swagger docs
- The route in the doc says '/test/{param:guid}' instead of /test/{param}' and you get a parse error at editor.swagger.io saying that "Declared path parameter "param:guid" needs to be defined as a path parameter at either the path or operation level"
Specifications
I think the problem is in the code in Nancy.Swagger.Annotations / RouteId.Create() method, if the code
if (!string.IsNullOrEmpty(swaggerRouteAttribute.Name))
{
routeId.Name = swaggerRouteAttribute.Name;
}
else if (swaggerRouteAttribute.Path != null)
{
routeId.Method = swaggerRouteAttribute.Method;
routeId.Path = module.ModulePath.EnsureForwardSlash() + swaggerRouteAttribute.Path;
routeId.Path = routeId.Path.Replace("//", "/");
}
was modified to do without the else keyword into
if (!string.IsNullOrEmpty(swaggerRouteAttribute.Name))
{
routeId.Name = swaggerRouteAttribute.Name;
}
if (swaggerRouteAttribute.Path != null)
{
routeId.Method = swaggerRouteAttribute.Method;
routeId.Path = module.ModulePath.EnsureForwardSlash() + swaggerRouteAttribute.Path;
routeId.Path = routeId.Path.Replace("//", "/");
}
it would work as expected
- Version: 2.2.53-alpha
- Project:
- Platform:
- Subsystem:
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels