Membership.GetUser () завершается ошибкой при вызове из HttpModule

2

Я вызываю Membership.GetUser() изнутри метода Application_Error() в файле Global.asax в приложении ASP.NET, чтобы записать некоторые данные журнала.

Однако, кажется, что он сбой, если в HttpModule произошла ошибка. Это нормально? Не является ли членство готовым во время выполнения HttpModules в ASP.NET? Я что-то делаю неправильно?

Он выдает ссылку на объект, не установленную на экземпляр объекта. исключение (в System.Web.Security.Membership.GetCurrentUserName(), в System.Web.Security.Membership.GetUser()).

  • 1
    Можете быть более конкретными? Выдает ошибку или просто возвращает ноль?
  • 0
    Да жаль. Выдает «Ссылка на объект, не установленная для экземпляра объекта». исключение (в System.Web.Security.Membership.GetCurrentUserName (), в System.Web.Security.Membership.GetUser ())
Показать ещё 1 комментарий
Теги:

2 ответа

3
Лучший ответ

Сессия еще не существует, где членство хранит свою информацию. FormsAuthentication.SetAuthCookie устанавливает cookie, но этот файл cookie считывается.

Я бы посмотрел на два события в вашем файле Global.asax.cs(или любой класс, полученный из HttpApplication)

  • AuthenticateRequest
  • AcquireRequestState
1

Вы можете использовать HttpApplication.User изнутри Global Application_Error. например:

User.Identity.Name

Здесь я использую:

protected void Application_Error(object sender, EventArgs e)
{
    try
    {
        Exception lastError = Server.GetLastError().GetBaseException();
        if (lastError is HttpException && ((HttpException)lastError).GetHttpCode() == 404)
            return;

        if (Request.UrlReferrer != null)
            lastError.Data.Add("Referrer", Request.UrlReferrer);
        if (Request.RawUrl != null)
            lastError.Data.Add("Page", Request.RawUrl);
        if (Request.UserHostAddress != null)
            lastError.Data.Add("Client IP", Request.UserHostAddress);
        if (Request.UserAgent != null)
            lastError.Data.Add("UserAgent", Request.UserAgent);
        if (User != null && User.Identity != null && !string.IsNullOrEmpty(User.Identity.Name))
            lastError.Data.Add("User", User.Identity.Name);

        Log.Error("Application_Error trapped at Global.asax", lastError);
    }
    // ReSharper disable EmptyGeneralCatchClause
    catch { } // Intentionally empty catch clause as this is the catchall exception handler. If it fails, the sky has fallen.
    // ReSharper restore EmptyGeneralCatchClause
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню