Предыстория: я хочу разработать новый API с использованием ASP.NET Core 7 и контроллеров, и я хочу использовать лучшие практики для возврата типизированных результатов, например, для упрощения документации.
Если я хочу вернуть типизированный результат из API, я могу сделать:
[HttpGet()]
public ActionResult<List<Products>> GetAllProducts()
{
var beers = repository.GetAllProducts();
return beers;
}
но мой вопрос заключается в том, что если я хочу вместо этого вернуть и использовать один из производных классов от IResult (по соображениям согласованности), то следующее ниже не будет работать, потому что для результатов требуется два возвращаемых типа.:
[HttpGet()]
public Results<Products> GetAllProducts()
{
var beers = repository.GetAllProducts();
return beers;
}
Конечно, я мог бы сделать такой хак:
[HttpGet()]
public Results<Products,BadRequest> GetAllProducts()
{
var beers = repository.GetAllProducts();
return beers;
}
Но это звучит немного глупо.
Каков рекомендуемый тип результата, если я хочу использовать IResult и хочу вернуть только один тип? Или ActionResult<List> единственный вариант?
Я чувствую, что, чтобы получить немного более чистый код и быть современным, я хочу придерживаться типов на основе IResult и не смешивать с IActionResult.
Это то, что тебе надо
[HttpGet()]
public IResult GetAllProducts()
{
var beers = repository.GetAllProducts();
return Results.Ok(beers);
}
@JoeMarkov Я могу неправильно понять. Не могли бы вы показать образец результата, который вы хотите получить?
Я предполагаю, что сегодня нет решения, я хотел вернуть IResult, но только один типизированный результат, например "public Results<Products> GetAllProducts()" , но нет типа результатов только с одним общим параметром. Сейчас я буду использовать ActionResult<T>
Не совсем, это, конечно, сработает, но мне нравится подход с типизированным типом результата, как вы получаете с Results<Products,BadRequest>", чтобы получить лучшую документацию и без необходимости добавлять дополнительные атрибуты. Я ищу правильный/лучший способ сделать это в .NET 7. Я знаю, что здесь есть много вариантов (ActionResult<T>), но в то же время, каков правильный способ?IResult кажется путем вперед для чистых API.