Как получить текущего пользователя из ServiceStack.Logging - PullRequest
0 голосов
/ 26 июня 2018

Я использую ASP.NET MVC и servicestack.logging Я использовал log4net.

Мне нужно получить текущего пользователя, прошедшего аутентификацию servicestack-jwt.

С приведенным ниже кодом в моей веб-конфигурации я просто получаю windows текущего пользователя.

  <appender type="log4net.Appender.RollingFileAppender" name="User_Log">
  <file value="C:\logging\user_log\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="false" />

  <layout type="log4net.Layout.PatternLayout">
     <header type="log4net.Util.PatternString" value="[START LOG] %newline" />
     <footer type="log4net.Util.PatternString" value="[END LOG] %newline" />
    <conversionPattern value="[%property{log4net:HostName}] - [%username] - [%identity] - [%w] -%identity%newline%utcdate - %-5level - %message%newline" />
  </layout>

Я также использовал приведенный ниже код в Global.asax

       protected void Application_Start()
    {

        ServiceStack.Logging.LogManager.LogFactory = new ServiceStack.Logging.Log4Net.Log4NetFactory(true);

        //I can save test
        Logger.InfoFormat("test");

        string name = "";
        HttpContext context = HttpContext.Current;
        if (context != null && context.User != null && context.User.Identity.IsAuthenticated)
        {
            name = context.User.Identity.Name;
        }
        //I can NOT save name
        _logger.InfoFormat(name);

    }

Любая помощь? Спасибо.

1 Ответ

0 голосов
/ 26 июня 2018

В ServiceStack Аутентифицированный пользователь хранится в пользовательской сессии , доступной из IRequest.GetSession(). При использовании AppHost, такого как ASP.NET Framework, который поддерживает текущий HttpContext в HttpContext.Current синглтоне, к нему можно получить доступ с помощью:

var req = HostContext.TryGetCurrentRequest();
var session = req.GetSession();
var userName = session.UserAuthName;
...