从 ASPNet Core 3.1 Api 控制器中的 ValidationProblem 获取traceId

jmi*_*has 5 c# asp.net-core

我在我的 Xamarin 客户端应用程序上使用 Refit。当我调用我的 Api 并出现 ModelState/Validation 错误时,我将 a 返回ValidationProblem(ModelState)给我的客户端。Refit 然后抛出一个ValidationApiException. 异常中有一个traceId。

traceId我怎样才能在服务器端获取它以便我可以记录它?我希望能够在出现错误/问题时将客户端设备日志与服务器关联起来。

Kir*_*kin 7

来源显示该属性是这样traceId检索的:

var traceId = Activity.Current?.Id ?? httpContext?.TraceIdentifier;
Run Code Online (Sandbox Code Playgroud)

如果你想在控制器中获取它,你可以像这样使用:

public IActionResult MyAction()
{
    // using System.Diagnostics for Activity
    var traceId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,httpContext更改为HttpContext,这是 的属性ControllerBase。如果您想在控制器外部访问它,您可能需要使用IHttpContextAccessor