首页 > 其他分享 >【Azure APIM】列举几种在APIM 策略中的主动生产的错误语句

【Azure APIM】列举几种在APIM 策略中的主动生产的错误语句

时间:2024-04-17 20:33:36浏览次数:17  
标签:语句 Errors 错误 set Azure APIM 日志

问题描述

在为APIM服务配置了诊断日志(Diagnostic Setting),把日志收集在Log A Workspace中,需要验证日志中是否能查看到请求的错误信息。

所以想人为的来制造一些错误。经过网络搜索,参考Policy的文档介绍后,完成了以下3种错误

 

第一种:使用 return-response 返回指定错误码

return-response 策略会取消执行,为调用方返回默认响应或自定义响应。

默认响应为200 OK,无正文。

可以通过上下文变量或策略语句指定自定义响应。 二者都提供时,会通过策略语句对上下文变量中包含的响应进行修改,然后再将其返回给调用方。

如下的示例:自定义返回505错误,并且设置错误消息为 Bearer error="invalid_token"。

<policies>
    <inbound>
        <base />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
        <return-response>
            <set-status code="505" reason="error0" />
            <set-header name="WWW-Authenticate" exists-action="override">
                <value>Bearer error="invalid_token"</value>
            </set-header>
        </return-response>
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

效果展示:

 

 

第二种: 定义变量,直接抛出异常 @{ throw new Exception( ... ); }

set-variable 策略声明set-variable变量,并为其分配通过表达式或字符串文本指定的值。在赋值语句种直接抛出异常

并使用重试(retry)策略,让错误多次出现。使得诊断日志种生成的日志Errors中保存请求中产生的全部错误

<policies>
    <inbound>
        <base />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <set-variable name="Error" value="@{ throw new Exception("test one time error here:ERR_001"+DateTime.UtcNow.ToString("O")); }" />
        <base />
    </outbound>
    <on-error>
        <base />
        <retry condition="@(505>= 500)" count="3" interval="1" first-fast-retry="true">
            <set-variable name="Error" value="@{ throw new Exception("test n time error here :ERR_002 or n in retry policy"+DateTime.UtcNow.ToString("O")); }" />
        </retry>
    </on-error>
</policies>

效果展示:

 

第三种:set-backend-service,设置错误域名,制造DNS解析错误

使用 set-backend-service 策略将传入请求重定向到一个后端,此后端不同于在 API 设置中为该操作指定的后端。比如:https://www.ted1111.com/

<policies>
    <inbound>
        <base />
        <set-backend-service base-url="https://www.ted1111.com/" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

效果展示:

实际错误:

forward-request (32.859 ms)
{
    "messages": [
        "Error occured while calling backend service.",
        "The remote name could not be resolved: 'www.ted1111.com'"
    ]
}

 

汇总

在Log A Workspace中, 查看日志表 ApiManagementGatewayLogs 中所收集的这三种错误日志:

第一种错误:并没有Errors被记录,只有错误的状态码返回。

第二种错误:状态码为500。但是,在Errors包含了请求中生产的全部日志,非常有利于Debug。

第三种错误:状态码为500。同时,在Errors中,也包含了请求中的详细错误。

 

参考资料

API 管理策略参考 : https://docs.azure.cn/zh-cn/api-management/api-management-policies

   

 

标签:语句,Errors,错误,set,Azure,APIM,日志
From: https://www.cnblogs.com/lulight/p/18141734

相关文章

  • 为什么python的数据库语句要用参数化构造的方式
    以下是一个python的数据库插入语句self.cur.execute('''INSERTINTObooks(url,title,product_type,price_excl_tax,price_incl_tax,availability,num_reviews,rating,category,describe)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)&......
  • 【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG
    问题描述看见一个有趣的页面,可以把输入的文字信息,直接输出SVG图片,还可以实现动图模式。示例URL: https://readme-typing-svg.demolab.com/?font=Fira+Code&pause=1000&color=F7F7F7&background=233911F6&center=true&vCenter=true&random=false&width=435&lines=%E6%8A%8A%E5%......
  • mysql Explan命令 如何分析语句
    MySQL中的EXPLAIN命令是一种用于分析查询语句执行计划的强大工具,它可以帮助您了解MySQL优化器如何处理SQL查询,揭示查询执行过程中的关键细节,如表的读取顺序、数据读取操作的操作类型、所使用的索引等。通过EXPLAIN分析查询语句,您可以找出潜在的性能瓶颈,进行针对性的......
  • 2、Oracle Select语句
    最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。视频链接:【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用如果有侵权,请联系删除,谢谢。1、SQL基础介绍SQL的全程是:structurequerylanguage。SQL语句分为以......
  • MySQL 中 DELETE 语句中可以使用别名么?
    1情境deletefromtest1t1wherenotexists(select1fromtest2t2wheret1.id=t2.id);以上sql报错:ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtouse......
  • 2.3.3 程序基本语句——for 语句、while 语句、do while 语句
    循环语句是三种基本语句中最重要的,也是相比有一定难度的。如果一段动作要多次执行,那么就要知道执行多少次或者满足什么条件之后结束循环。这里我们用一个循环控制量i来表示(多层循环可能还会使用j、k等)。C++中,通常有如下三种循环结构:for语句、while语句、dowhile语句一......
  • 在MyBatis中,可以使用以下动态SQL标签来编写灵活的SQL语句
    一、<if>:条件判断标签,用于在SQL语句中添加条件判断。通过判断给定的条件是否成立,决定是否包含相应的SQL片段。示例:<selectid="getUserList"resultType="User">SELECT*FROMuser<where><iftest="username!=null">ANDusername=#{userna......
  • 10.lua流程控制语句
    []:表示可选1.if语句基本框架:if()then//()可要可不要代码块[elseif()then代码块]end//示例1a=1b=1if(a>b)then print("a>b")else print("a<=b")end输出结果如下:a<=b//示例2:if(a>b)then print("a>b&quo......
  • Python循环语句
    循环while循环i=0whilei<10:print(i)#输出0-9i+=1#Python中不支持自增和自减random随机数importrandom#导入含有随机数的库randomnum=random.randint(1,100)#创建一个变量num,将1-100中的随机数赋值给num注:Python中导入库(包)可以在代......
  • Oracle 分页的SQL语句优化
    ORACLE的分页SQL,基本上在绝大部分的业务系统上都有这种SQL。处理这种SQL,基本上要用到两点:(1).利用rownum的COUNTSTOPKEY特性.(2).利用索引的排序特性,消除sortorderby. 今天,同事发给我两个SQL。执行计划大概如下:  第1个SQL的执行计划,没有出现COUNTSTOPKEY,结合......