ASP.NET Core 2.1 Использование HttpContext в представлении - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть это утверждение 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()

Но это не позволяет мне использовать Select после SingleOrDefault.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Однако результат выглядит примерно так:

Поскольку .SingleOrDefault возвращает элемент заявки, представление отображает элемент с помощью метода .ToString.

Но это не позволяет мне использовать Select после SingleOrDefault.

.SingleOrDefault возвращает элемент в коллекции, а .Select ожидает коллекцию. Вам нужно просто посетить свойство .Value этого предмета напрямую.

@Context.User.Claims.SingleOrDefault(u => u.Type == "UserName")?.Value
0 голосов
/ 15 ноября 2018

SingleOrDefault() возвращает один элемент, который соответствует критериям, а не другой набор IQueryable или IEnumerable, который может быть Select позже.

Возвращает один конкретный элемент последовательности или значение по умолчанию если этот элемент не найден.

Вы должны использовать Where(), чтобы вернуть коллекцию перед использованием Select():

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...