Как получить Web API и Swagger для поддержки параметра маршрута «int или const-string»? - PullRequest
0 голосов
/ 01 октября 2018

Мой 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 и делая параметр tenantIdnullable:

[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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...