【问题标题】:Cannot use await with my instance of UserManager不能在我的 UserManager 实例中使用 await
【发布时间】:2017-10-13 20:30:29
【问题描述】:

我正在尝试使用 UserManager 的实例提取选定的用户,以便在视图中显示有关特定用户的详细信息。我正在尝试使用以下代码行:

var user = await _userManager.Users.SingleOrDefaultAsync(m => m.Id == id);

但是,这会产生以下错误:

“'await' 运算符只能在异步方法中使用。”

我真的很困惑,因为 SingleOrDefaultAsync 方法肯定是异步方法 - 线索就在名称中!当我将鼠标悬停在它上面时,它甚至会显示“等待”,那么为什么我不能在这种情况下使用“等待”关键字呢?

我试过只取出'await'关键字,然后它会编译,但如果我尝试访问视图,我会收到以下错误:

InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“System.Threading.Tasks.Task`1[MyProject.Models.ApplicationUser]”,但此 ViewDataDictionary 实例需要“MyProject.Models.ApplicationUser”类型的模型项'。

对于上下文,这是我的控制器方法:

    //
    // GET /Account/Details/5
    public IActionResult Details(string id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var user = _userManager.Users.SingleOrDefaultAsync(m => m.Id == id);

        if (user == null)
        {
            return NotFound();
        }

        return View(user);
    }

这是我的视图所期望的:

@model ApplicationUser

非常感谢任何帮助,如果这是一件我正在努力解决的非常简单的事情,我深表歉意,我仍然是 .Net 和 MVC 的初学者!

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

将您的操作方法设为async。它现在应该返回 Task<IActionResult> 而不是 IActionResult

现在您可以在其中等待异步方法

public async Task<IActionResult> Details(string id)
{
    if (id == null)
    {
        return NotFound();
    }

    var user = await _userManager.Users.SingleOrDefaultAsync(m => m.Id == id);

    if (user == null)
    {
        return NotFound();
    }
    return View(user);
}

InvalidOperationException:传入的模型项 ViewDataDictionary 是类型 'System.Threading.Tasks.Task`1[MyProject.Models.ApplicationUser]',但是 此 ViewDataDictionary 实例需要类型为模型项 'MyProject.Models.ApplicationUser'

当您调用不带await 关键字的异步方法时,会出现上述异常。当你执行下面的代码时,

var user = _userManager.Users.SingleOrDefaultAsync(m =&gt; m.Id == id);

这里的用户类型是Task&lt;User&gt;,而不是User。但是您的视图被强类型化为User 并期望User 对象,但您正试图传递一个任务。这就是你得到异常的原因。

【讨论】:

  • 谢谢!现在这完全有道理,我完全误解了我得到的错误。
猜你喜欢
  • 2023-03-09
  • 2018-10-24
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 2020-03-26
  • 2012-10-08
相关资源
最近更新 更多