- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在从事 ASP.Net vNext/MVC6 项目。我正在掌握 ASP.Net Identity。
ApplicationUser
类显然是我应该添加任何其他用户属性的地方,这适用于 Entity Framework,并且我的其他属性按预期存储在数据库中。
但是,当我想从我的 View 中访问当前登录用户的详细信息时,问题就来了。具体来说,我有一个 _loginPartial.cshtml
,我想在其中检索和显示用户的 Gravatar 图标,为此我需要电子邮件地址。
Razor View
基类有一个 User 属性,它是一个 ClaimsPrincipal
。我如何从这个 User
属性返回到我的 ApplicationUser
,以检索我的自定义属性?
请注意,我不是在问如何查找信息;而是在询问如何查找信息。我知道如何从 User.GetUserId()
值中查找 ApplicationUser
。这更多的是关于如何明智地处理这个问题的问题。具体来说,我不想:
这似乎是一个“横切关注点”,应该有一个集中的标准解决方案,但我觉得我错过了一 block 拼图。从 View 中获取这些自定义用户属性的最佳方式是什么?
注意:似乎 MVC 团队通过确保始终将 UserName 属性设置为用户的电子邮件地址,在项目模板中回避了这个问题,巧妙地避免了他们执行此查找以获取用户的需要电子邮件地址!这对我来说似乎有点欺骗,在我的解决方案中,用户的登录名可能是也可能不是他们的电子邮件地址,所以我不能依赖这个技巧(而且我怀疑我以后需要访问其他属性).
最佳答案
原始答案更新:(这违反了操作的第一个要求,如果您有相同的要求,请参阅我的原始答案)您可以在不修改声明和添加扩展文件(在我的原始解决方案)通过在 Razor View 中引用 FullName 作为:
@UserManager.GetUserAsync(User).Result.FullName
原答案:
这几乎只是 this stackoverflow question 的一个较短示例并关注此 tutorial .
假设您已经在“ApplicationUser.cs”中设置了属性以及适用的 ViewModels 和 Views 以进行注册。
使用“FullName”作为额外属性的示例:
修改“AccountController.cs”注册方法为:
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var user = new ApplicationUser {
UserName = model.Email,
Email = model.Email,
FullName = model.FullName //<-ADDED PROPERTY HERE!!!
};
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
//ADD CLAIM HERE!!!!
await _userManager.AddClaimAsync(user, new Claim("FullName", user.FullName));
await _signInManager.SignInAsync(user, isPersistent: false);
_logger.LogInformation(3, "User created a new account with password.");
return RedirectToLocal(returnUrl);
}
AddErrors(result);
}
return View(model);
}
然后我添加了一个新文件“Extensions/ClaimsPrincipalExtension.cs”
using System.Linq;
using System.Security.Claims;
namespace MyProject.Extensions
{
public static class ClaimsPrincipalExtension
{
public static string GetFullName(this ClaimsPrincipal principal)
{
var fullName = principal.Claims.FirstOrDefault(c => c.Type == "FullName");
return fullName?.Value;
}
}
}
然后在您需要访问该属性的 View 中添加:
@using MyProject.Extensions
并在需要时调用它:
@User.GetFullName()
这样做的一个问题是我必须删除我当前的测试用户,然后重新注册才能看到“FullName”,即使数据库中有 FullName 属性。
关于c# - 我应该如何从 ASP.NET Core View 访问我的 ApplicationUser 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35781423/
我在 Visual Studio 中创建了一个新的 ASP.NET MVC 项目,模板创建了一个 IdentityConfig.cs 文件,如下所示 using System; using Syste
我有一个从同事那里得到的 ASP MVC 项目,它有 2 个上下文。一个来自登录所需的模板,另一个是自制的。所以我想把两者结合起来,但我总是收到这个错误: ApplicationUser is not
我正在使用 ASP.NET Identity 2.0。目前我想通过表 UserDetails 扩展 ApplicationUser(将 AspNetUsers 重命名为 Users),例如 First
是否可以检查 ApplicationUser 是否有声明? 我知道可以检查 ApplicationUser 是否在某个角色中 userManager.IsInRoleAsync(application
在我的 MVC 应用程序中,我使用 TPT inheritance 创建了基本 ASP Identity ApplicationUser 类的两个子类。 ,并希望向对象添加一些声明,以便我可以轻松地在
我正在尝试为我的模拟 ApplicationUserManager 提供一个 ApplicationUser。当我尝试添加角色时,我注意到 Roles 是一个只读属性。不确定在我的测试中实现的最佳方式
我创建了一个名为 Person 的自定义类来存储姓名、地址等。这个类/模型是从其他模型交叉引用的,包括 ApplicationUser: public class ApplicationUser :
我有以下实体: public class ApplicationUser : IdentityUser { ... public int? StudentId { get; set;
我在 Asp.net 中有一个 Web 应用程序,首先使用 Entity Framework 6 和数据库。用户连接时遇到问题。这是我的代码: Web.config
我正在从 Identity 1.0.0 迁移到 Identity 2.0.1 之后 article 并且生成的迁移代码与新的 IdentityUser 无关。它不会添加新列。 所以我做了一个新项目并再
我正在尝试掌握 ASP.NET MVC 5 中引入的新成员资格系统,但我遇到了一个小问题,我很确定您能帮我解决这个问题。 我要离开 this tutorial并为 ApplicationUser 引入
应该在什么基础上决定使用 IdentityDbContext与 IdentityDbContext在 ASP.NET MVC5 应用程序中? 使用IdentityDbContext给我们带来什么好处而
我希望能够使用 WebAPI 2 公开用户列表。但是,由于我在 MVC5 中使用新的 Asp.Net 身份验证框架,我似乎找不到一种方法来仅将特定字段标记为 数据成员。 这是我所拥有的: [DataC
我有这门课 public class ApplicationUser : IdentityUser { public string Email { get; set; } public s
Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Collections.Generic.IE
我正在谷歌搜索以在 ASP.NET Identity 3.0 的 Controller 中获取应用程序用户,但我只找到 5 及以下的结果。 我正在尝试获取 ApplicationUser 属性,但我根
我问过有关旧 MVC 版本和成员资格的类似问题,但这些解决方案不适用于 Idendity 和 MVC 6。 我想在 _LoginPartial.cshtml 文件中显示用户的名字。因此,我想访问当前登
我首先使用实体框架代码对用户创建小的 CRUD 操作。现在我需要使用存储过程删除用户,所以我找到许多链接获取如何在 EF 中使用存储过程的解决方案。所以我写这段代码那个。但是我在类中编写此代码和方
我将这个问题作为文档发布,因为我花了很多时间才找到这个简单的问题。我正在使用 VS15 生成的原始 MVC 项目并尝试对其进行修改。 错误:[InvalidOperationException:实体类
我正在使用 EF6/.Net 4.5.1 在 Web 窗体的用户控件中检索 ListView 的数据。我修改了 ApplicationUser 以包含一个使用 FK 属性的导航属性 [1:1],该属性
我是一名优秀的程序员,十分优秀!