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 =&gt; u.Type == "UserName").Select(c =&gt; c.Value).SingleOrDefault()吗? 【参考方案1】:

SingleOrDefault() 返回与条件匹配的单个元素,而不是另一个 IQueryableIEnumerable 集合,后者可以在以后进行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 中的所有视图

目录ASP.NET Core 2.1 入门教程

如何将 Microsoft.jQuery.Unobtrusive.Ajax 与 libman(库管理器)asp.net Core 2.1 一起使用?

如何在 asp.net core 2.1 中使用 net.tcp 服务

如何在 asp.net core 2.1 中使用自定义消息设置状态代码?

在 ASP.NET Core 2.1 中使用 cookie [重复]