2017-08-07 58 views
0

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

context.Variables["LogFailedEvent"].StatusCode 

我看到这个错误 -

错误元件'设置身体上线83,第4栏:“对象”不包含定义关于“的StatusCode”和没有扩展方法“的StatusCode”接受类型“对象”的第一个参数可以发现

按照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> 

回答

2

你需要将其强制转换:

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

此外,由于您选择设置忽略错误=“真”,你可能想首先是要检查变量包含了这个键,因为在这种情况下,如果请求失败,这个变量根本就不会被创建。

+0

谢谢,这是工作。 –

相关问题