如何获得Web API和Swagger支持“ int或const-string”路由参数?

时间:2018-10-01 03:50:27

标签: asp.net-core swagger

我的Web API具有这样的路由路径:

/api/tenants/{tenantId:int}/documents/{documentId:int}

Web API Controller这样的动作;

public async Task<IActionResult> Get(Int32 tenantId, Int32 documentId)
{
    // do stuff
}

为了使API易于使用,我想允许将{tenantId}替换为const字符串“ self”,以便客户无需记住其租户ID。

我目前通过应用两个Route属性并使tenantId参数为可空状态来做到这一点:

[Route("api/tenants/{tenantId:int}/documents/{documentId:int}")
[Route("api/tenants/self/documents/{documentId:int}")
public async Task<IActionResult> Get(Int32? tenantId, Int32 documentId)
{
}

但这会导致Swagger和NSwag生成如下所示的客户端代码,这不是我想要的:

public async Task<bservableCollection<Document>> GetListAsync(int? tenantId, CancellationToken cancellationToken)
{
    var urlBuilder_ = new StringBuilder();
    urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/tenants/self/documents?");
    if (tenantId != null) 
    {
        urlBuilder_.Append("tenantId=").Append( Uri.EscapeDataString( ConvertToString( tenantId, CultureInfo.InvariantCulture))).Append("&");
    }
    urlBuilder_.Length--;
    // ...

查看如何错误地将tenantId添加为查询字符串参数,而不是将其插入URI路径。

0 个答案:

没有答案