C# ASP.NET Core 2.1在视图中使用HttpContext
我有这个httpcontext声明,我想在视图中使用它来显示当前用户的用户名。到目前为止,我是这样做的:C# ASP.NET Core 2.1在视图中使用HttpContext,c#,asp.net,linq,asp.net-core,asp.net-core-mvc,C#,Asp.net,Linq,Asp.net Core,Asp.net Core Mvc,我有这个httpcontext声明,我想在视图中使用它来显示当前用户的用户名。到目前为止,我是这样做的: <p>@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")</p> 但它不允许我在SingleOrDefault之后使用Select。返回与条件匹配的单个元素,而不是另一个IQueryable或IEnumerable集合,后者可以在以后进行Select-ed 返回序列的单个特定元素或默认
<p>@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")</p>
但它不允许我在SingleOrDefault之后使用Select。返回与条件匹配的单个元素,而不是另一个IQueryable
或IEnumerable
集合,后者可以在以后进行Select
-ed
返回序列的单个特定元素或默认值
如果找不到该元素
在使用之前,应使用返回集合:
对于C#6.0及更高版本,请使用null条件运算符获取其值:
@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value
然而,结果是这样的:
因为.SingleOrDefault
返回一个索赔项目,因此视图使用其.ToString
方法呈现该项目
但它不允许我在SingleOrDefault之后使用Select
.SingleOrDefault
返回集合中的项目,而.Select
需要一个集合。您应该直接访问此项的.Value
属性
@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value
是否应该是
@Context.User.Claims.Where(u=>u.Type==“UserName”)。选择(c=>c.Value)。SingleOrDefault()
?
@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value
@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value