gpt4 book ai didi

c# - 无法在 Task、IActionResult 和 ActionResult 之间做出决定

转载 作者:行者123 更新时间:2023-11-30 14:45:17 26 4
gpt4 key购买 nike

虽然我确实理解 TaskActionResult 等概念。但我仍然不确定如果没有指定其他内容,在 Controller 中输入哪个最直观。

考虑到返回类型的明确性,我应该这样做:

[HttpGet] public ActionResult<Thing> Get()
{
return Ok(Context.Things);
}

但是,对于通用类型的 API 范例,我应该使用这个:

[HttpGet] public IActionResult Get()
{
return Ok(Context.Things);
}

最后,考虑到 API 哲学的异步性质,我应该应用以下内容:

[HttpGet] public Task<IActionResult> Get()
{
return Ok(Context.Things);
}

在一般的全新场景中,我无法决定哪一种最合适。前两个看似有效。直觉上,我更愿意选择第三个,但由于它不起作用(转换无效),我担心我可能找错了二叉树。

完全不确定如何用谷歌搜索它,我正在获取各种示例。不确定如何判断哪些是相关的,我更愿意问。

最佳答案

以下是不同返回选项的快速比较:

具体类型

public Thing Get() {
return Context.Things.GetThing(1234);
}

如果操作将始终返回一种可能的类型,则可以。但是,大多数操作可能会返回具有不同类型的异常(即 200 以外的状态代码)。

IActionResult 类型

这解决了上面的问题 IActionResult返回类型涵盖不同的返回类型。

public IActionResult Get() {
Thing thing = Context.Things.GetThing(1234);
if (thing == null)
return NotFound();
else
return Ok(thing);
}

对于异步操作,使用 Task<IActionResult> :

public async Task<IActionResult> Get() {
Thing thing = await Context.Things.GetThing(1234);
if (thing == null)
return NotFound();
else
return Ok(thing);
}

ActionResult 类型

ASP.NET Core 2.1 引入了 ActionResult<T>返回类型与 IActionResult 相比具有以下优势输入:

1- 操作的预期返回类型是从 T 推断出来的在ActionResult<T> .如果你用 [ProducesResponseType] 装饰你的 Action 属性,您不再需要显式指定其 Type属性(property)。例如,您可以简单地使用 [ProducesResponseType(200)]而不是 [ProducesResponseType(200, Type = typeof(Thing))] .

2- T转换为 ObjectResult , 这意味着 return new ObjectResult(T);简化为 return T; .

public ActionResult<Thing> Get() {
Thing thing = Context.Things.GetThing(1234);
if (thing == null)
return NotFound();
else
return thing;
}

对于异步操作,使用 Task<ActionResult<T>> :

public async Task<ActionResult<Thing>> Get() {
Thing thing = await Context.Things.GetThing(1234);
if (thing == null)
return NotFound();
else
return thing;
}

更多详细信息,您可以引用MSDN页面Controller action return types in ASP.NET Core Web API .

关于c# - 无法在 Task<IActionResult>、IActionResult 和 ActionResult<Thing> 之间做出决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com