Я пытаюсь исправить код после обновления платформы с .net 4.8 до .net8. Я имею дело с проблемой в моем коде здесь:
controller.User = new GenericPrincipal(new GenericIdentity("test"), new[] { Roles.VirtualUser });
Где контроллер.Пользователь, очевидно, доступен только для чтения. Вот как выглядит пользователь в пространстве имен Microsoft.AspNetCore.mvc:
/// <summary>
/// Gets the <see cref = "ClaimsPrincipal"/> for user associated with the executing action.
/// </summary>
public ClaimsPrincipal User => HttpContext?.User!;
Я не уверен, что вызывает сбой этого кода. Я читал подобные сообщения, но не верю, что ни у одного из них есть точная проблема. Я видел, что мне может понадобиться метод установки, но не верю, что смогу редактировать код библиотеки. Любые предложения/советы будут с благодарностью приняты. Спасибо!
Вы можете использовать его из ControllerBase.HttpContext. Например, в действии контроллера:
HttpContext.User =
new GenericPrincipal(new GenericIdentity("test"), new[] { Roles.VirtualUser });
Спасибо!! Это то, что я искал. Знаете ли вы, как мне избавиться от этой ошибки, которую она меня вызывает? Мои методы не статичны, поэтому я не уверен, почему я это получаю; Ошибка CS0120. Для нестатического поля, метода или свойства HttpContext.User требуется ссылка на объект.
@Майя, честно говоря, не знаю. Показанный код был протестирован с действием контроллера и работал нормально. Обратите внимание, что HttpContext
больше не является статическим, это свойство ControllerBase.
Хорошо спасибо! Как только я смогу выяснить, что делает мой тест статическим контекстом/понять, что происходит, я смогу принять ваш ответ, спасибо за вашу помощь
@Майя, кажется, в твоем случае это должно быть что-то вроде controller.HttpContext.User
.
Я не считаю, что это относится только к .Net8, так как Controller.User был доступен только для чтения и в Asp.Net MVC 5 (см., например, system.web.mvc.controller.user. Может быть, это всегда было сломано?