1

有没有办法在转发到后端服务之前使用 Azure API 管理策略检查traceparent http 标头的正确性?

4

2 回答 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 &apos;traceparent&apos; 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 回答