有没有办法在转发到后端服务之前使用 Azure API 管理策略检查traceparent http 标头的正确性?
问问题
803 次
2 回答
3
我能找到的最好的方法是使用正则表达式创建 API 管理策略。它将找到大多数无效案例,预计一些极端案例。如果提供了无效的 http traceparent 标头,则 400 - 错误请求,返回响应。
<choose>
<when condition="@(!Regex.IsMatch(context.Request.Headers.GetValueOrDefault("traceparent",""), @"^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(500)))">
<return-response>
<set-status code="400" reason="Bad request - Missing or invalid traceparent http header" />
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>@(new JObject(new JProperty("statusCode", 400), new JProperty("message", "Missing or invalid 'traceparent' http header for distributed tracing. More information how to supply one at https://www.w3.org/TR/trace-context-1/")).ToString())</set-body>
</return-response>
</when>
</choose>
于 2020-05-15T09:27:46.707 回答
0
只能手动。您可以将选择策略与策略表达式一起使用,您可以在其中获取标头的值并使用 C# 代码对其进行验证。然后根据您是否认为有效采取不同的行动。
于 2020-03-18T04:33:38.850 回答