假设我具有应用程序.net Core 2.1 Web API + Angular 7
为什么我总是要返回ActionResult? 两者之间有什么区别吗?
public ActionResult<MyDTO> GetData(){
return new MyDTO();
}
那:
public MyDTO GetData(){
return new MyDTO();
}
在两种情况下,我都将在UI上接收对象,并且都返回代码200。那么使用ActionResult还是一种好的做法?
答案 0 :(得分:1)
使用此功能时:
public MyDTO GetData(){
return new MyDTO();
}
除了引发异常之外,您不能返回任何不是MyDTO
实例的东西。
使用IActionResult<T>
时表示您可能返回MyDTO
的实例,但您不必。您可以返回BadRequest,InternalServerError或任何适合API /业务需求的内容。
答案 1 :(得分:1)
基本上,当您返回对象时,您的代码必定会交付该对象。
在您的情况下,一切都很好,并且返回MyDTO
和http 200
。
但是让我们考虑一下这种情况:
public MyDTO GetData(){
if (someValidationFailed)
{
//bad request, not authorized, forbidden etc.
return BadRequest();
}
return new MyDTO();
}
那不会加起来。因此,总的来说:返回IActionResult
会给您带来更大的灵活性。
答案 2 :(得分:1)
什么是ActionResult?
ActionResult 是一个 抽象 类,表示操作方法的结果。类本身继承自System.Object,只增加了一个抽象方法:ExecuteResult,这是ActionResult的派生类将自己实现的抽象方法。 >
为什么 ActionResult 是抽象类?这样不同的控制器动作可以返回不同类型的结果,并且仍然让 MVC 正确处理它们。
你可能已经猜到了这个实现是因为 ActionResult 有很多派生类,你是完全正确的。但这些不同类型的结果究竟是什么?它们分为三个部分:内容返回、重定向和状态结果,我们将依次查看每一种.
当一个操作中可能有多个 ActionResult 返回类型时,IActionResult 返回类型是合适的。
ActionResult 类型代表各种HTTP 状态代码。从 ActionResult 派生的任何非抽象类都有资格作为有效的返回类型。
此类别中的一些常见返回类型是 BadRequestResult (400)、NotFoundResult (404) 和 OkObjectResult (200)。>
或者,ControllerBase 类中的常规方法可用于从操作返回 ActionResult 类型。
答案 3 :(得分:0)
这取决于您需要应用程序执行的操作。 ActionResult
是the IActionResult
interface的默认实现,它具有ExecuteResultAsync(ActionContext)
方法。因此,如果您想在给定的上下文中异步执行结果,那么您想使用它而不是像他们所说的那样重新发明轮子。
如果不需要所有这些,则返回对象,就可以了。
答案 4 :(得分:0)
使用ActionResult而不是对象,您可以针对不同的情况(错误,重定向..)返回不同的响应类型
返回对象而不是ActionResult总是返回200响应(假定未引发异常)
有关结果和返回结果的方法的完整列表,请检查: