访问状态代码或使用<send-request>

时间:2017-08-07 13:46:54

标签: azure azure-api-management

我正在使用<send-request>政策发出请求,我需要检查请求的状态代码。为此,我正在尝试访问response-variable-name的StatusCode属性。但是,使用此代码时 -

context.Variables["LogFailedEvent"].StatusCode

我看到了这个错误 -

  

第83行第4列中元素'set-body'出错:'object'不包含'StatusCode'的定义,并且没有扩展方法'StatusCode'接受类型'object'的第一个参数可以找到< / p>

根据docs -

  

response-variable-name属性用于访问返回的响应。此属性中定义的名称可用作context.Variables字典中的键以访问IResponse对象。

要么我误解了文档中的内容,要么文档是错误的。有人能提出解决方案吗?

政策相关部分

<choose>
    <when condition="@(context.Response.StatusCode != 201 && context.Response.StatusCode != 202)">

        <send-request mode="new" response-variable-name="LogFailedEvent" timeout="20" ignore-error="true">
            <set-url>@(string.Format("{0}{1}?code={2}&statusCode={3}&statusReason={4}&message={5}", "{{BVT_LogEventsFailedFunction_Url}}", "{{BVT_LogEventsFailedFunction_Template}}", "{{BVT_LogEventsFailedFunction_Code}}", context.Response.StatusCode, context.Response.StatusReason, context.Response.Body.As<string>()))</set-url>
            <set-method>POST</set-method>
            <set-header name="Content-Type" exists-action="override">
                <value>application/json</value>
            </set-header>
            <set-body>@(context.Request.Body.As<string>())</set-body>
        </send-request>

        <set-body>@(string.Format("{{\"message\":\"event captured by LogFailedEvents\",\"requestId\":\"{0}\",\"statusCode\":\"{1}\",}}", context.RequestId.ToString(), context.Variables["LogFailedEvent"].StatusCode))</set-body>

    </when>
</choose>

1 个答案:

答案 0 :(得分:2)

你需要施展它:

((IResponse)context.Variables["LogFailedEvent"]).StatusCode

另外,由于你设置了ignore-error =“true”,你可能首先要检查Variables是否包含这个键,因为在这种情况下,如果请求失败,则根本不会创建这个变量。