Ядро ASP.NET: соответствующие маршруты, один с телом, один без - PullRequest
0 голосов
/ 18 октября 2018

У меня есть маршрут DELETE, который выглядит следующим образом:

[HttpDelete("{id}")]
public async Task<StatusCodeResult> DeleteService(string id)
{
    return await _repo.DeleteServiceAsync(id);
}

Мне также нужно поддерживать параметр [FromBody] на этом маршруте, который будет выглядеть примерно так:

[HttpDelete("{id}")]
public async Task<StatusCodeResult> DeleteService([FromBody] ServiceEntity service, string id)
{
    if(service == null)
        return await _repo.DeleteServiceAsync(id);
    else
        return await _repo.DeleteServiceWithEntityAsync(id, service);
}

Однако это не работает из-за AllowEmptyInputInBodyModelBinding , который я не хочу устанавливать в значение true;в любом другом маршруте / конечной точке желательно поведение по умолчанию, AllowEmptyInputInBodyModelBinding == false.

У меня может быть два разных маршрута, один с параметром body, а другой без, но который производит совпадающие маршруты, и ни одна конечная точка не попадет:

[HttpDelete("{id}")]
public async Task<StatusCodeResult> DeleteService(string id)
{
    return await _repo.DeleteServiceAsync(id);
}

[HttpDelete("{id}")]
public async Task<StatusCodeResult> DeleteServiceWithEntity([FromBody] ServiceEntity service, string id)
{
    return await _repo.DeleteServiceWithEntityAsync(id, service);
}

Какой лучший способ получить желаемое поведение?Я не могу добавить отдельную конечную точку, потому что мне нужно соответствовать спецификации с существующим API.

...