AWS API Gateway:未获取正则表达式错误

时间:2017-11-26 17:26:12

标签: amazon-web-services f# aws-lambda aws-api-gateway

我有一个绑定到AWS API网关的Lambda函数。当我用/foo/barbar之类的东西调用它时,我的函数返回(正确)类似于:

{
  "code": 404,
  "message": "bar not found"
}

我现在想要的状态代码也是404,但是按照我在网上找到的教程,到目前为止我没有成功。我做了什么:

我为404创建了一个方法响应,如下所示: 404 response

在集成响应中,我设置了以下内容: 404 integration response

据我了解,这应该在响应文档中出现404时将代码设置为404,但我仍然得到200

我错过了什么?

1 个答案:

答案 0 :(得分:2)

我进行了更多调查,发现API网关非常挑剔它预期错误消息的位置,以及我如何将其删除。

the documentationerrorMessage属性被认为是与Lambda Error Regex匹配的new Exception("404") |> raise 属性,以及first answer to this post状态,你必须抛出异常使用Java 8.我使用.net作为我的Lambda函数,所以我做了这个非常简单的事情:

404

然后我设置了Lambda Error Regex new Exception("foo 404 bar") |> raise 并且它有效。

我接下来尝试的是:

.*404.*

使用正则表达式type Error = { code: int message: string } ... new Exception({ code = 404; message = name |> sprintf "%s not found" } |> JsonConvert.SerializeObject) |> raise 它仍然有用。

现在来了:我试图发出一个JSON对象作为错误,但我在C#或F#中找不到任何东西让我这样做,所以我想出了以下内容:

errorMessage

繁荣,我再次得到200.

所以我从中得出结论,AWS并不喜欢new Exception(name |> sprintf "404: %s not found") |> raise 属性中的字符串化JSON,所以我现在只输出一个这样的简单字符串:

404:.*

并使用正则表达式<div id="dialog" class="pops" title="1"> <img src="print1.jpg"></img> </div> <div id="dialog2" class="pops" title="2"> <img src="print2.jpg"></img> </div> <div id="dialog3" class="pops" title="3"><img src="print3.jpg"></img> </div> ,它现在有效。这意味着,我不得不使用API​​网关中的映射构建我想要的输出对象。

这很不方便,很容易绊倒...