Почему я должен возвращать ActionResult вместо объекта? - PullRequest
0 голосов
/ 12 ноября 2018

Предполагая, что у меня есть приложение .net Core 2.1 Web API + Angular 7

Почему я всегда должен возвращать ActionResult?Есть ли разница между этим:

public ActionResult<MyDTO> GetData(){
    return new MyDTO();
}

и этим:

public MyDTO GetData(){
    return new MyDTO();
}

В обоих случаях я получу объект в интерфейсе, и оба вернут код 200. Так что это просто хорошая практикаиспользовать ActionResult или как?

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

Используя ActionResult вместо объекта, вы можете возвращать разные типы ответов для разных ситуаций (ошибки, перенаправления ..)

Возвращение объекта вместо ActionResult всегда возвращает ответ 200 (supossing no Exceptionбыл брошен)

Для получения полного списка результатов и методов, используемых для их возврата, пожалуйста, проверьте:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.controllerbase?view=aspnetcore-2.1

0 голосов
/ 12 ноября 2018

Когда вы используете это:

public MyDTO GetData(){
    return new MyDTO();
}

Вы не можете вернуть что-либо, кроме экземпляра MyDTO, кроме выдачи исключения.

Когда вы используете IActionResult<T>, вы говорите, что вы можете вернуть экземпляр MyDTO, но вам не нужно . Вы можете вернуть BadRequest, InternalServerError или любое другое, что подходит API / бизнес-потребностям.

0 голосов
/ 12 ноября 2018

По сути, когда вы возвращаете объект, ваш код обязан доставить этот объект.

В вашем сценарии все в порядке, и MyDTO возвращается вместе с http 200.

Но давайте рассмотрим этот сценарий:

public MyDTO GetData(){

    if (someValidationFailed)
    {
        //bad request, not authorized, forbidden etc.
        return BadRequest();
    }

    return new MyDTO();
}

Это не сложится.В общем, возвращение IActionResult дает вам больше гибкости.

0 голосов
/ 12 ноября 2018

Это зависит от того, что вам нужно сделать для вашего приложения. ActionResult является реализацией по умолчанию для интерфейса IActionResult , который имеет метод ExecuteResultAsync(ActionContext). Поэтому, если вы хотите выполнить свой результат асинхронно с заданным контекстом, то вы хотите использовать его, а не изобретать колесо, как говорится.

Если вам все это не нужно, верните свой объект, и это нормально.

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