我有一个绑定到AWS API网关的Lambda函数。当我用/foo/bar
和bar
之类的东西调用它时,我的函数返回(正确)类似于:
{
"code": 404,
"message": "bar not found"
}
我现在想要的状态代码也是404,但是按照我在网上找到的教程,到目前为止我没有成功。我做了什么:
据我了解,这应该在响应文档中出现404
时将代码设置为404,但我仍然得到200
。
我错过了什么?
答案 0 :(得分:2)
我进行了更多调查,发现API网关非常挑剔它预期错误消息的位置,以及我如何将其删除。
the documentation中errorMessage
属性被认为是与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网关中的映射构建我想要的输出对象。
这很不方便,很容易绊倒...