在 Azure APIM 策略中设置后端响应状态代码

Setting Backend Response Status Code in Azure APIM Policy

提问人:James De Luca 提问时间:11/4/2023 更新时间:11/4/2023 访问量:13

问:

我有以下 Azure APIM 策略。但是,新的 JProperty(“status”, context.Response.StatusCode) 设置不正确。我怀疑这是因为上下文。Response.StatusCode 在此上下文中不可用。关于如何解决此问题以便设置响应的正确状态代码的任何建议?

<policies>
    <inbound>
    </inbound>
    <backend>
        <forward-request />
    </backend>
    <outbound>
        <send-one-way-request mode="new" timeout="10000">
            <set-url>myURL</set-url>
            <set-method>POST</set-method>
            <set-body>@{
            var appIdNumber = Convert.ToInt32(context.Variables["appId"]);
            var apiId = context.Variables["apiId"];
                        JArray jarrayObj = new JArray();
                            JObject obj = new JObject(
                                new JProperty("apiId", apiId),
                                new JProperty("appId", appIdNumber),
                                new JProperty("endpoint", context.Request.Url.Path + context.Request.Url.QueryString),
                                new JProperty("method", context.Request.Method),
                                new JProperty("status", context.Response.StatusCode),
                                new JProperty("apiLatency", context.Elapsed.Milliseconds),
                                new JProperty("timestamp", new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()),
                                new JProperty("originIp", context.Request.IpAddress)
                                );
                            jarrayObj.Add(obj);
                        return jarrayObj.ToString();
                    }</set-body>
        </send-one-way-request>
    </outbound>
    <on-error />
</policies>

我怀疑这是因为上下文。Response.StatusCode 在此上下文中不可用。

azure-policy apim

评论


答:

0赞 James De Luca 11/4/2023 #1

我确实想通了。由于我正在模拟此端点,因此未设置状态代码。我将此行添加到后端策略中,现在状态代码已正确设置。

<backend>
        <set-status code="200" reason="OK" />
</backend>