Собственно, в чем разница и что лучше использовать повсеместно и в каких случаях?
Вроде, результат будет в обоих случаях один и тот же...
Для приложения, которое будет пользоваться этим API разницы нет, а для контроллера это необходимо чтобы иметь возможность возвращать разные ответы (status code). Например:
public User GetUser(int id)
{
// ...
return user;
}
ничего плохого в таком коде нет, но если мы захотим отправить NotFound
или BadRequest
или другой код, нам компилятор не позволит, т.к. типы будут не сходиться, для этого и был придуман "общий" интерфейс IActionResult
и его реализации: ActionResult<T>
, OkResult
, NotFoundResult
и т.д. Это позволяет писать такой код:
public ActionResult<User> GetUser(int id)
{
if (/* тут может быть некая валидация */)
return BadRequest(); // возвращает BadRequestResult, т.е. код 400
if (/* ... */)
return NotFound(); // возвращает NotFoundResult, т.е. код 404
// ...
return user; // код 200, все ок
}
Фреймворк распознает эти типы и понимает как это правильно отправлять пользователю.
И ещё, лучше использовать вместо "чистого" интерфейса IActionResult
его реализацию - ActionResult<T>
. Это немного упрощает код, т.к. вместо return Ok(user);
вы можете писать просто return user
.
Подробнее можно почитать тут.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Доброго времени сутокСуть такая, есть клиенты (приложения Windows) и нужно сделать на них синхронизацию данных
Входными данными является строка, содержащая один из символов!?;:() например: "a; fg x; x y;"
у меня есть спавнер, и нужно чтоб он через время удалял объект что заспавнил, и вот я думаюкак мне повесить скрипт на уже СОЗДАННУЮ КОПИЮ, или...