.NET Application_BeginRequest - Как получить Справочник пользователя?

Я пытаюсь получить ссылку на пользовательский объект в моем файле Global.asax Application_BeginRequest. Я использую свойство Context.User но я получаю a NullReferenceException. Действительно ли возможно получить ссылку пользовательского объекта в Application_BeginRequest?

16
задан Hans Passant 18 June 2010 в 21:08
поделиться

2 ответа

У вас нет доступа к объекту User, потому что запрос еще не аутентифицирован.

Попробуйте вместо этого использовать Application_AuthenticateRequest.

Вот объяснение всех событий Global.asax: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5771721.html

И прохождение жизненного цикла приложения в MSDN: http://msdn.microsoft.com/en-us/library/ms178473.aspx

Edit: Я понял, что вы делаете. Замените оператор if на оператор if not (извините, если синтаксис неправильный, я не использую VB.NET):

 Sub Application_AuthenticateRequest() 
   If Context.User <> Nothing Then 
      Throw New Exception("User now exists") 
 End Sub 

Вы заметите, что этот метод запускается более одного раза. Исключение возникнет только во второй или третий раз. Это происходит потому, что каждый запрос следует жизненному циклу приложения. Поэтому вместо того, чтобы выполнять какое-либо действие, когда пользователь является null, вы должны выполнять его, когда пользователь не является null.

Если ваша цель - динамическое ограничение доступа, вам следует создать отдельный HttpModule и назначить его файлам, которые вы ограничиваете

Однако вам нужно быть осторожным, чтобы не переписывать всю инфраструктуру безопасности приложений ASP.NET. Вместо этого вы можете ограничить доступ к определенным папкам на основе роли.

25
ответ дан 30 November 2019 в 17:04
поделиться

Нет, вместо этого вы должны использовать Application_AuthenticateRequest . Это самый ранний момент, когда у вас есть пользователь.

9
ответ дан 30 November 2019 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: