ASP.NET Core 2.1 在视图中使用 HttpContext
Posted
技术标签:
【中文标题】ASP.NET Core 2.1 在视图中使用 HttpContext【英文标题】:ASP.NET Core 2.1 Use HttpContext in view 【发布时间】:2019-04-18 02:47:34 【问题描述】:我有这个 httpcontext 声明,我想在我的视图中使用它来显示当前用户的用户名。到目前为止,我是这样做的:
<p>@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")</p>
但是,结果是这样的:
用户名:user@email.com
我错过了什么吗?我试着这样做:
@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName").Select(c => c.Value).SingleOrDefault()
但它不允许我在 SingleOrDefault 之后使用 Select。
【问题讨论】:
应该是@Context.User.Claims.Where(u => u.Type == "UserName").Select(c => c.Value).SingleOrDefault()
吗?
【参考方案1】:
SingleOrDefault()
返回与条件匹配的单个元素,而不是另一个 IQueryable
或 IEnumerable
集合,后者可以在以后进行Select
-ed。
返回序列的单个特定元素或默认值 如果没有找到该元素。
你应该在使用Select()
之前使用Where()
返回一个集合:
@Context.User.Claims.Where(u => u.Type == "UserName").Select(c => c.Value).SingleOrDefault()
对于 C# 6.0 及以上版本,使用空条件运算符获取其值:
@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value
【讨论】:
【参考方案2】:但是,结果是这样的:
因为.SingleOrDefault
返回一个声明项,所以视图使用其.ToString
方法呈现该项。
但它不允许我在 SingleOrDefault 之后使用 Select。
.SingleOrDefault
返回集合中的一个项目,而.Select
需要一个集合。您应该直接访问该项目的.Value
属性。
@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value
【讨论】:
以上是关于ASP.NET Core 2.1 在视图中使用 HttpContext的主要内容,如果未能解决你的问题,请参考以下文章
共享布局视图不适用于 ASP.NET Core 2.1 中的所有视图
如何将 Microsoft.jQuery.Unobtrusive.Ajax 与 libman(库管理器)asp.net Core 2.1 一起使用?
如何在 asp.net core 2.1 中使用 net.tcp 服务