【问题标题】:what to return when return type is Task<IactionResult> in .netcore返回类型为 .net core 中的 Task<IactionResult> 时返回什么
【发布时间】:2021-09-20 20:43:30
【问题描述】:

我真的很困惑 .Netcore 什么通常应该返回到队列(消息代理),我有一个类

 public  Task<IActionResult> GetMerchantPlatform(int  merchantID) {

        try
        {
            var mrchantInfo =  dbContext.MerchantPlatforms.Where(s => s.Id == merchantID);
            return Task.FromResult(mrchantInfo);
        }
        catch (Exception ex)
        {

            throw ex;

         }
      }

它给了我一个错误:严重性代码描述项目文件行抑制状态 错误 CS0029 无法将类型 'System.Threading.Tasks.Task>' 隐式转换为 'System.Threading.Tasks.Task'

什么时候应该返回 Iactionresult?什么时候应该返回类?为什么会出现上述错误?

【问题讨论】:

  • 不相关,但throw ex; 是一种反模式。如果您不以任何方式处理异常,只需完全删除 try/catch。如果您正在处理异常并想重新抛出它,只需使用throw;。您目前正在做的是从原始异常中删除有用的信息。
  • in catch return=Task.FromResult(0); 我希望你写的代码能工作
  • @EminNiftiyev:不,语法错误在这里不太可能有帮助。 (您不能为return 关键字分配值。)此外,catch 块中不会发生错误。抛出异常始终是方法的有效退出策略。
  • @David 感谢您的评论,我已在我的代码中删除了它,您对返回类型有任何想法吗?
  • 阅读错误消息并意识到你在mrchantInfo 中得到的只是一个IQueryable&lt;T&gt; - 你甚至没有使查询进入数据库。您可能想要做一些事情来实现方法中的结果,例如调用SingleOrDefaultToList,或类似的东西(实际上可能是async 变体)来实际拥有一个MerchantPlatform 或将其设置在局部变量中,然后再担心返回。

标签: c# asp.net-core


【解决方案1】:

通过使用ControllerBase 类,您必须返回IActionResultTask&lt;IActionResult&gt;。有大量可用的预定义结果对象,您可以从中进行选择,因为结果包含必须由您定义的多个信息。首先是应该返回的 HTTP 状态代码,这取决于您可能必须返回正文和/或一些标头条目。

如果您的方法在 ControllerBase 类中,则该类中已经有一些辅助方法,例如 Ok()BadRequest()Forbid()NoContent()NotFound() 等。所有这些都带有多个重载,具体取决于他们通常的用例。

所以在你的情况下,你可能必须这样写:

public async Task<IActionResult> GetMerchantPlatform(int  merchantID)
{
    try
    {
        var mrchantInfo = await dbContext.MerchantPlatforms
            .Where(s => s.Id == merchantID)
            .ToListAsync();

        return Ok(mrchantInfo);
    }
    catch (Exception ex)
    {
        return BadRequest(ex);
    }
}

请注意,可能并非每个函数都需要 try/catch。为此,您可以注册您自己编写的中间件,该中间件可以在每个操作周围放置这样的块,并根据您的需要采取行动。但这是另一个问题或搜索的一些东西

asp core middleware

如果你真的只想在你的方法中返回内容,你应该考虑使用ApiControllerAttribute

【讨论】:

  • 非常感谢,它工作正常,关于你的第二条评论,自写中间件是什么?你能举个例子或给我发这方面的链接吗?
  • 添加了搜索关键字的链接。 ?
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 2019-08-14
  • 2018-11-29
  • 2015-09-04
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多