通过中间件记录Web API请求时如何获取当前用户的ID

我在中间件中具有以下Invoke函数,用于记录Web api请求。它基于this example,并且工作正常。但是,我也想保存发送请求的当前用户的username

 public async Task Invoke(HttpContext httpContext,IApiLogService apiLogService)
 {
     try
     {
         _apiLogService = apiLogService;

         var request = httpContext.Request;
         if (request.Path.StartsWithSegments(new PathString("/api")))
         {
             var stopWatch = Stopwatch.StartNew();
             var requestTime = DateTime.UtcNow;
             var requestBodyContent = await ReadRequestBody(request);
             var originalBodyStream = httpContext.Response.Body;

             await SafeLog(requestTime,stopWatch.ElapsedMilliseconds,200,//response.StatusCode,request.Method,request.Path,request.QueryString.ToString(),requestBodyContent
                   );           
         }
         else
         {
             await _next(httpContext);
         }
     }
     catch (Exception ex)
     {
         await _next(httpContext);
     }
 }

但是,User的{​​{1}}属性似乎缺少用户信息。下面我分享其内容。我想知道如何获取发送请求的用户的ID。我没有使用Windows身份验证。有什么建议吗?

通过中间件记录Web API请求时如何获取当前用户的ID

wenpc007 回答:通过中间件记录Web API请求时如何获取当前用户的ID

解释为什么会发生的关键点

  

httpContext的User属性似乎缺少用户信息

是Startup类的Configure方法中中间件的顺序。 通过按中间件组件在Startup类的Configure方法中的顺序运行中间件组件,ASP.NET Core请求管道处理可以正常工作。

因此,在将自定义中间件添加到Startup类的Configure方法中的管线app.UseAuthentication();之前,您需要先移动app.UseYourMiddleware();

本文链接:https://www.f2er.com/3161642.html

大家都在问