Задать имя пользователя для события запроса? - PullRequest
0 голосов
/ 28 октября 2018

Я реализовал пользовательскую схему аутентификации в веб-сервисе на основе веб-хоста ASP.NET Core.Я хочу добавить Application Insights к этому сервису.

Когда я успешно аутентифицирую пользователя, я делаю что-то вроде этого

telemetry.Context.User.Id = authenticatedUserName;

telemetry объект - TelemetryClient, который я получаю отвнедрение зависимости.

Теперь проблема в том, что идентификатор пользователя не отображается среди запросов, и я не уверен, почему.

Это работает

customEvents | where user_Id != "" and name  == "MyCustomEvent"

но не это

request | where user_Id != ""

или это

dependencies | where user_Id != ""

Есть ли где-то еще, где я должен установить идентификатор пользователя для запроса?Я бы предпочел не создавать пользовательское событие только для этого.

Я также попытался установить свойство User для объекта HttpContext, но, похоже, оно не имеет никакого эффекта.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

На самом деле ответ был удивительно прост.

HttpContext ctx = ...
var requestTelemetry = ctx.Features.Get<RequestTelemetry>()

requestTelemetry.Context.User.Id = authenticationResult.UserName;
0 голосов
/ 29 октября 2018

Вы должны использовать ITelemetryInitializer для своих целей.

Ниже приведены мои тестовые шаги (ядро asp.net 2.1):

Шаг 1: Добавьте Aplication Insights telemetry на right click your project -> Add -> Application Insights telemetry.Снимок экрана, приведенный ниже: enter image description here

Шаг 2: Добавьте новый класс, который реализует ITelemetryInitializer:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;

namespace WebApplication33netcore
{
    public class MyTelemetryInitializer: ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            var request = telemetry as RequestTelemetry;
            if (request != null)
            {
                //set the user id here with your custom value
                request.Context.User.Id = "ivan111";
            }
        }

    }
}

Шаг 3: Зарегистрируйте инициализатор телеметрии в ConfigureServicesметод в Startup.cs.Подробнее см. здесь :

     public void ConfigureServices(IServiceCollection services)
     {
         services.Configure<CookiePolicyOptions>(options =>
         {

          options.CheckConsentNeeded = context => true;
          options.MinimumSameSitePolicy = SameSiteMode.None;
         });


         services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

         //Add the following code to register your telemetry initializer
         services.AddSingleton<ITelemetryInitializer>(new MyTelemetryInitializer());
    }

Шаг 4. Проверьте результат теста:

В visual studio Application Insights Search: enter image description here

Затем проверьте это в Google Analytics: enter image description here

...