C# 如何在.NET Core中检索当前登录用户的电子邮件?

C# 如何在.NET Core中检索当前登录用户的电子邮件?,c#,asp.net-core,razor,C#,Asp.net Core,Razor,关于这一点,我已经经历了很多次,并且找到了一种有效的方法(@UserManager.FindByNameAsync(UserManager.GetUserName(User)).Result.Email),我需要将电子邮件分配给页面代码中的一个变量,以便我可以将其用于其他用途,并且该类不是控制器类,因此我希望在控制器之外执行此操作 我收到一个错误,即对象引用未设置为对象的实例。在运行它和更改索引()的返回类型时,在视图中的电子邮件地址:@user.Email行上HomeController中的函

关于这一点,我已经经历了很多次,并且找到了一种有效的方法
(@UserManager.FindByNameAsync(UserManager.GetUserName(User)).Result.Email)
,我需要将电子邮件分配给页面代码中的一个变量,以便我可以将其用于其他用途,并且该类不是控制器类,因此我希望在控制器之外执行此操作


我收到一个错误,即
对象引用未设置为对象的实例。
在运行它和更改索引()的返回类型时,在视图中的
电子邮件地址:@user.Email
行上HomeController中的函数到PrescriptionModel I获取错误
没有给出与PrescriptionModel所需的形式参数“logger”相对应的参数。PrescriptionModel(ILogger

使用该模型检索MVC模式下任何看起来非常糟糕的数据。 如果您不想触摸控制器,更好的方法是在视图中使用代码块。 例如:

@using Microsoft.AspNetCore.Identity

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
@{
    var usr = await UserManager.GetUserAsync(User);
    var email = usr?.Email;
}
因此,您只需在控制器操作/索引中查询所需的所有信息,并将其传递给模型查看。 这允许您拥有不同用途的文件。 用于数据操作/业务逻辑的控制器 模型仅用于传递值。 视图来渲染它。 选中此项可获得更详细的信息:

使用模型检索MVC模式下看起来非常糟糕的任何数据。 如果您不想触摸控制器,更好的方法是在视图中使用代码块。 例如:

@using Microsoft.AspNetCore.Identity

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
@{
    var usr = await UserManager.GetUserAsync(User);
    var email = usr?.Email;
}
因此,您只需在控制器操作/索引中查询所需的所有信息,并将其传递给模型查看。 这允许您拥有不同用途的文件。 用于数据操作/业务逻辑的控制器 模型仅用于传递值。 视图来渲染它。 选中此项可获得更详细的信息:

我已经十年没有使用razor了……但你过去需要变量……你没有阅读回复、包或其他可以包含数据的地方。我已经十年没有使用razor了……但你过去需要变量……你没有阅读回复、包或其他可以包含数据的地方。谢谢s确实有效,但如果我的视图名为Prescription.cshtml,那么可以在Prescription.cshtml.cs文件中访问电子邮件变量吗?因为我想使用当前用户的电子邮件发送电子邮件,但其代码将在我假设的模型中。请阅读更新的答案。模型只是用于从控制器传递到vie的数据的类谢谢你,现在这更有意义了,我已经用我所做的更改更新了原始帖子,我现在仍然在努力实际显示电子邮件地址,虽然我也用ViewBag尝试过,但效果很好,但字段最终是空的。只是不要在你的模型上使用记录器注入。正如我所说的在使用它将日期从控制器传递到视图之前。您尝试通过依赖项注入分配记录器,但在某种程度上,您的依赖项解析程序无法解析实际的记录器实例。我认为您的ViewData中有一个空用户,因为您强制转换到了错误的类型。但我不能确定,因为我需要查看调试器。请尝试模型w不使用记录器或使用调试器获取ViewData[“ApplicationUser”]中的类实例。谢谢。这确实有效,但如果我的视图名为“Prescription.cshtml”,那么可以在“Prescription.cshtml.cs”文件中访问电子邮件变量吗?因为我想使用当前用户的电子邮件发送电子邮件,但其代码将位于我假设的模型中。请阅读更新的答案。模型只是用于从con传递数据的类troller查看和返回。谢谢你,现在这更有意义了,我已经用我所做的更改更新了原始帖子,但现在我仍在努力实际显示电子邮件地址,我也只是用ViewBag尝试了一下,效果很好,但字段最终是空的。只是不要在你的mo上使用记录器注入del。正如我之前所说,只需使用它将日期从控制器传递到视图。您尝试通过依赖项注入分配记录器,但在某种程度上,依赖项解析程序无法解析实际的记录器实例。我认为您的ViewData中有一个空用户,因为您强制转换到了错误的类型。但我不能确定,因为我需要查看调试器。Ju尝试不带记录器的模型,或使用调试器获取ViewData[“ApplicationUser”]中的类实例。
 public class HomeController : Controller
    {
        private readonly UserManager<IdentityUser> _userManager;
        public HomeController (UserManager<IdentityUser> manager)
        {
            _userManager = manager;
        }
        public async Task<IActionResult> Index()
        {
            var usr =  await _userManager.GetUserAsync(HttpContext.User);
            return View(new UserModel { Email = usr?.Email });
        }
public class UserModel
    {
        public string Email { get; set; }
    }