.NET Application_BeginRequest - Как получить ссылку на пользователя? - PullRequest
15 голосов
/ 19 июня 2010

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

Ответы [ 2 ]

24 голосов
/ 19 июня 2010

У вас нет доступа к объекту 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

Редактировать: я вижу, что вы делаете.Измените свой оператор if на оператор 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 Application Security.Вместо этого вы можете ограничить доступ к определенным папкам в зависимости от роли.

9 голосов
/ 19 июня 2010

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

...