【发布时间】:2019-11-05 07:10:58
【问题描述】:
我在中间件中有以下 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);
}
}
但是,httpContext 的 User 属性似乎缺少用户信息。下面我分享它的内容。我想知道如何获取发送请求的用户的 ID。我没有使用 Windows 身份验证。有什么建议吗?
【问题讨论】:
-
猜测,您的中间件在身份验证中间件之前运行。请问你能说明你是如何配置这两个的吗?
-
@John 非常感谢!你是对的 :) 我第一次使用中间件。我很高兴解决方案如此简单!
标签: c# asp.net asp.net-core asp.net-web-api middleware