Преимущество использования IActionResult в качестве типа результата в действиях

В чем преимущество или рекомендация по использованиюIActionResult в качестве типа возврата контроллера WebApi вместо фактического типа, который вы хотите вернуть?

Большинство примеров, которые я видел, возвращаютIActionResult, но когда я создаю свой первый сайт, я исключительно использую классы View Model в качестве типов возврата .... теперь я чувствую, что все сделал неправильно!

Ответы на вопрос(2)

Решение Вопроса

что вы можете возвращать коды ошибок / состояний или перенаправления / URL ресурсов.

Например:

public IActionResult Get(integer id) 
{
    var user = db.Users.Where(u => u.UserId = id).FirstOrDefault();

    if(user == null) 
    {
        // Returns HttpCode 404
        return NotFound();
    }

    // returns HttpCode 200
    return ObjectOk(user);
}

или же

public IActionResult Create(User user) 
{
    if(!ModelState.IsValid) 
    {
        // returns HttpCode 400
        return BadRequest(ModelState);
    }

    db.Users.Add(user);
    db.SaveChanges();

    // returns HttpCode 201
    return CreatedAtActionResult("User", "Get", new { id = user.Id} );
}
 thesystem22 дек. 2018 г., 19:59
@ Tseng Понял, я неправильно понял вопрос. Спасибо за разъяснение для меня
 Tseng22 дек. 2018 г., 17:48
@thesystem: Вопрос возвращалсяIActionResult против возвращенияT
 Hamid Mosalla25 мар. 2017 г., 19:34
@KiranChalla Я не понимаю, что мы получаем сIActionResult с которым мы не можем получитьActionResult, являетсяActionResult ограничить нас каким-то образом? Другие ответы в Интернете не настолько убедительны.
 Tseng25 мар. 2017 г., 21:24
@HamidMosalla; Технически не много, ноIActionResult это интерфейс иActionResult абстрактный класс. В то время как все ActionResults от MVC наследуются отActionResultне дается или не гарантируется, что некоторые классы результатов действий сторонних производителей делают то же самое, поэтому всегда лучше использовать минимально возможный тип, здесь:IActionResult
 thesystem22 дек. 2018 г., 17:41
@Tseng Я опоздал на вечеринку, но вы также можете вернутьсяBadRequest а такжеCreatedAtActionResult сIActionResultчто кажется, что нет никаких преимуществ сIActionResult тогда по твоим примерам.
 Hamid Mosalla26 мар. 2017 г., 04:21
@ Цен я знаюIActionResult' is an interface and doesn't have the synchronous version of Метод ExecuteResult` в отличие отActionResultЯ не нашел ничего отличного от точки зрения потребителя, я думаю, что это может быть скорее решением для разработки фреймворка, в котором мы, потребители этого фреймворка, не должны заботиться об этом.
 Kiran Challa23 июн. 2016 г., 22:08
Также юнит-тестирование

что вы можете легко протестировать свой код с помощью фреймворка.

И когда вы строите свои контроллеры, вы также можете легко изменить ваш возвращаемый объект. IActionResult является интерфейсом и имеет много реализаций, таких как JsonResult, ViewResult, FileResult и так далее.

 Baruch Atta15 мая 2019 г., 21:00
Не могли бы вы использовать IActionResult, чтобы вернуть (представьте голос «Церковная леди») строку?

Ваш ответ на вопрос