захватить необязательный параметр URL в качестве локальной переменной - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь создать конечную точку API двойного назначения. Идея состоит в том, что если пользователь передает необязательный параметр checkExistence, то ответ будет истинным или ложным, в зависимости от того, существует ли комбинация FormId + Bucket + sceneName в базовой таблице базы данных. С другой стороны, если параметр checkExistence не передан, то ответом будет 404 или не найдены либо данные (если комбинация не существует), либо данные (если комбинация существует). Вот код на данный момент:

[HttpGet("{scenarioName}/{bucket}/{formulaId}/{checkExistence?}")]
public virtual async Task<IActionResult> GetAsync(string scenarioName, DateTime bucket, string formulaId)
{
    var dto = await DataService.GetAsync(new object[] { formulaId, bucket, scenarioName });

    string? checkExistence = "";

    if (string.IsNullOrEmpty(checkExistence))
    {
        if (dto == null)
        {
            return NotFound();
        }
        return Ok(dto);
    }
    else
    {
        return (dto == null) ? Ok(false) : Ok(true);
    }
}

Когда конечная точка нажата, она действует так, как будто checkExistence всегда пусто, даже если в URL передается значение для этого параметра. Я подозреваю, что это потому, что {checkExistence?} из URL не присваивается локальной переменной checkExistence ... но я не знаю, как go сделать это назначение, чтобы проверить эту теорию. Есть ли способ сделать это назначение? И есть ли другие причины, по которым API мог бы действовать таким образом?

1 Ответ

1 голос
/ 17 марта 2020

Необязательный параметр маршрута должен быть включен в качестве необязательного параметра в сигнатуру метода. Затем можно удалить переменную, объявленную в методе:

[HttpGet("{scenarioName}/{bucket}/{formulaId}/{checkExistence?}")]
public virtual async Task<IActionResult> GetAsync(string scenarioName, DateTime bucket, string formulaId, string checkExistence = null)
{
    var dto = await DataService.GetAsync(new object[] { formulaId, bucket, scenarioName });

    if (string.IsNullOrEmpty(checkExistence))
    ...
}

Подробнее см. Необязательные параметры URI и значения по умолчанию .

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