假设我有应用程序 .NET Core 2.1 Web API + Angular 7
为什么我总是要返回ActionResult?这有什么区别吗:
public ActionResult<MyDTO> GetData(){
return new MyDTO();
}
Run Code Online (Sandbox Code Playgroud)
然后:
public MyDTO GetData(){
return new MyDTO();
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都会在 UI 上接收对象,并且都返回代码 200。那么使用 ActionResult 只是一种好的做法,还是什么?
当你使用这个:
public MyDTO GetData(){
return new MyDTO();
}
Run Code Online (Sandbox Code Playgroud)
MyDTO除了抛出异常之外,您不能返回任何不是 的实例。
当你用IActionResult<T>你说,你可能会返回的实例MyDTO,但你并不需要。您可以返回 BadRequest、InternalServerError 或任何适合 API/业务需求的内容。
什么是ActionResult?
ActionResult 是一个抽象类,表示操作方法的结果。该类本身继承自System.Object,仅添加了一个额外的抽象方法:ExecuteResult,这是 ActionResult 的派生类将自行实现的抽象方法。
为什么ActionResult是一个抽象类?这样不同的控制器操作可以返回不同类型的结果,并且仍然让 MVC 正确处理它们。
您可能已经猜到这个实现是因为 ActionResult 有很多派生类而完成的,您是完全正确的。但这些不同类型的结果到底是什么?它们分为三个部分:内容返回、重定向和状态结果,我们将依次查看每种类型。
当一个操作中可能有多个 ActionResult 返回类型时,IActionResult返回类型是合适的。
ActionResult 类型代表各种HTTP 状态代码。从 ActionResult 派生的任何非抽象类都有资格作为有效的返回类型。
此类别中的一些常见返回类型包括BadRequestResult (400)、NotFoundResult (404) 和OkObjectResult (200)。
或者,可以使用 ControllerBase 类中的常规方法从操作返回 ActionResult 类型。
这取决于您的应用程序需要做什么。 是接口的ActionResult默认实现,它有一个方法。因此,如果您想在给定的上下文中异步执行结果,那么您需要使用它,而不是像他们所说的那样重新发明轮子。IActionResultExecuteResultAsync(ActionContext)
如果您不需要所有这些,那么返回您的对象就可以了。
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |