4

部署在 openfaas 中的函数如何向调用者返回不同的 HTTP 状态码?像 4xx 代码一样。

根据文档,看门狗将处理http 状态 200stdoutstderr5xx 的 或 。

有没有办法改变400、409等状态?我正在使用由下载的 csharp 模板faas-cli

4

2 回答 2

4

你不能,如此处所述https://github.com/openfaas/faas-netes/issues/147

建议的解决方案是返回带有状态码的有效载荷,并在接收端解析有效载荷。

于 2018-11-27T02:32:36.020 回答
0

即使您 system.exit(1) 或抛出异常,默认的 python 模板似乎也会返回 200。我假设其他旧模板的行为类似,这是经典看门狗的预期。

但是,如果您使用的语言模板支持运行新的看门狗,我认为它可以返回非 200 代码,例如 400、404 等。您可以使用 faas-cli 下载这些模板,它们来自 openfaas -孵化器项目和社区。

我刚刚确认使用来自 openfaas-incubator 的 python3-http 语言/模板和来自远程摄像机的csharp-httprequest可以返回非 200 代码,如 400、404 等。

这将列出可用的模板:

faas-cli template store list

要安装我测试过的 csharp 模板:

faas-cli template store pull distantcam/csharp-httprequest

可以像这样轻松修改 csharp-httprequest 的 OOTB 处理程序以返回 400:

using Microsoft.AspNetCore.Http;
using System.IO;
using System.Threading.Tasks;

namespace Function
{
    public class FunctionHandler
    {
        public async Task<(int, string)> Handle(HttpRequest request)
        {
            var reader = new StreamReader(request.Body);
            var input = await reader.ReadToEndAsync();

            return (400, $"Hello! Your input was {input}");
        }
    }
}
于 2019-10-10T02:25:22.317 回答