Мой 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}
должен быть заменен константной строкой "self", чтобы клиентам не нужно было помнить свой идентификатор арендатора.
В настоящее время я делаю это, применяя два атрибута Route
и делая параметр tenantId
nullable:
[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
какПараметр querystring вместо вставки его в путь URI.