2017-10-17 49 views
1

我有一个端点需要一个自定义类型(在这种情况下是一个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,我也可以让两个端点出现 - 但我不想那样做,因为那样会改变有效的输入集。

+0

这看起来并不像一个有效的路径,是LOCALDATE它不能在URL路径来表示的对象... – HelderSepu

+0

所以类型都有一个模型绑定,允许结构(它不是一个对象)从一个字符串解析 - 在我们的例子中是ISO8601格式。端点工作正常,也就是说,您可以在没有任何问题的情况下使用我的/ route/2017-10-17进行调用。它只是不出现在Swagger/Swashbuckle中。 –

+1

要排除故障,您可以添加一个控制器/操作,显示来自GetApiExplorer的所有终端:https://github.com/heldersepu/SwashbuckleTest/blob/master/Swagger_Test/Controllers/ApiExplorerController.cs – HelderSepu

回答

0

我通过从字符串中添加自定义绑定和自定义转换器来解决此问题。 需要这些操作以便ApiExplorer解析路线。之后,Swagger也解析了路线。

见我的例子在这里:https://stackoverflow.com/a/47123965/908936