我的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路径。