Настройка вызова RESTful I Для входа в систему. Net Core 3.1 - PullRequest
0 голосов
/ 19 апреля 2020

Я работаю над решением . net core 3.1 .

Структура:

-Solution
-- Api (webapi)
-- Common (class lib)
-- Repository (class lib)
-- Service (class lib)

Служба ведения журнала настроена в общем проекте, а общий проект является ссылкой для других трех проектов.

Когда Api получает вызов, я хочу установить sh идентификатор для вызова, а затем включить этот идентификатор в каждый журнал, который создается для этого вызова. Идея заключается в том, что когда я просматриваю логи, я могу легко отфильтровать их, чтобы увидеть все действия для одного вызова.

Это работает в 2.2, хотя это выглядит как хак, (см. код ниже) . Я ищу чистый путь к t ie всем моим журналам для одного звонка вместе, используя. net core 3.1. Другие решения приветствуются.

In. net core 2.2 Я использовал фильтр действий для установки переменной сеанса

LogProperties class

public static string TraceId
{
    get
    {
        return LQogProperties.httpContextAccessor.HttpContext.Session.GetString(LogProperties.TRACEID);
    }

    set
    {
        var bytes = Encoding.UTF8.GetBytes(value);
        LogProperties.httpContextAccessor.HttpContext.Session.Set(LogProperties.TRACEID, bytes);
    }
}

public static void Configure(IHttpContextAccessor httpContextAccessor)
{
    LogProperties.httpContextAccessor = httpContextAccessor;
}

public static void GetTraceId()
{
    LogProperties.TraceId = Guid.NewGuid().ToString().Substring(0, 8).ToUpper();
}

TraceFilter: IActionFilter

public void OnActionExecuting(ActionExecutingContext context)
{
    LogProperties.GetTraceId();
}

Startup.ConfigureServices

...
// Setup trace id
services.AddMvc(config => { config.Filters.Add(new TraceIdFilter()); });
services.AddSession();
services.AddHttpContextAccessor();
...

Startup.Configure

...
app.UseSession();
LogProperties.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>());

...
...