c# - ASP.NET Core 2.1 在 View 中使用 HttpContext

标签 c# asp.net linq asp.net-core asp.net-core-mvc

我有这个 httpcontext 声明,我想在我的 View 中使用它来显示当前用户的用户名。到目前为止,我是这样做的:

<p>@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")</p>

但是,结果是这样的:

UserName: user@email.com

我错过了什么吗?我试着这样做:

@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName").Select(c => c.Value).SingleOrDefault()

但它不允许我在 SingleOrDefault 之后使用 Select。

最佳答案

SingleOrDefault()返回与条件匹配的单个元素,而不是另一个 IQueryableIEnumerable 集合,后者稍后可以被 Select 编辑。

Returns a single, specific element of a sequence, or a default value if that element is not found.

你应该使用 Where()在使用 Select() 之前返回一个集合:

@Context.User.Claims.Where(u => u.Type == "UserName").Select(c => c.Value).SingleOrDefault()

对于 C# 6.0 及以上版本,使用 null 条件运算符获取其值:

@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value

关于c# - ASP.NET Core 2.1 在 View 中使用 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53312009/

相关文章:

c# - 从一个 LINQ 查询添加到两个不同的列表

c# - 集成 WPF 窗体和普通 C# 窗体

c# - ASP.net MVC 发送邮件

c# - 如何检查 Entity Framework 中我知道不存在的内容?

mysql - asp.net 可以做到这一点吗?

c# - 如何使用 lambda 表达式在列表中设置多个值?

c# - 根据另一个查询的结果过滤一个 linq 查询

c# - 带有 TextBlock 和复选框的 XAML ToggleButton

asp.net - 将静态数据存储在数据库或文件系统中

c# - 在不登录的情况下获取 Intranet 上 Web 应用程序的域\用户名