自定义类型的路由不显示在Swagger中
问题描述:
我有一个端点需要一个自定义类型(在这种情况下是一个NodaTime.LocalDate)。该类型具有自定义模型联编程序,并使用MapType<>
映射到Swagger中。自定义类型的路由不显示在Swagger中
当路径中使用类型作为路径参数时,端点不会显示在Swagger/Swashbuckle中。但是,如果我将其删除(以便将其作为URL参数包含在内),则它显示得很好。
一个简单的版本端点:
public class MyController : System.Web.Http.ApiController
{
[Route("my/route/{date}")] // Doesn't show up
[Route("my/route")] // Does show up
[HttpPut]
public Task<IHttpActionResult> MyEndpoint(LocalDate date, InputModel inputModel) {
// Do stuff...
}
}
注意都端点实际工作,一个就是不露面。如果将类型更改为DateTime
,我也可以让两个端点出现 - 但我不想那样做,因为那样会改变有效的输入集。
答
我通过从字符串中添加自定义绑定和自定义转换器来解决此问题。 需要这些操作以便ApiExplorer解析路线。之后,Swagger也解析了路线。
这看起来并不像一个有效的路径,是LOCALDATE它不能在URL路径来表示的对象... – HelderSepu
所以类型都有一个模型绑定,允许结构(它不是一个对象)从一个字符串解析 - 在我们的例子中是ISO8601格式。端点工作正常,也就是说,您可以在没有任何问题的情况下使用我的/ route/2017-10-17进行调用。它只是不出现在Swagger/Swashbuckle中。 –
要排除故障,您可以添加一个控制器/操作,显示来自GetApiExplorer的所有终端:https://github.com/heldersepu/SwashbuckleTest/blob/master/Swagger_Test/Controllers/ApiExplorerController.cs – HelderSepu