如何在Open FaaS中返回HTTP状态代码?

时间:2018-11-23 22:29:54

标签: openfaas

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

根据文档,看门狗将针对HTTP状态200或5xx处理stdoutstderr

是否可以更改状态,例如400、409等?我正在使用faas-cli

下载的csharp模板

2 个答案:

答案 0 :(得分:3)

您不能这样做,https://github.com/openfaas/faas-netes/issues/147

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

答案 1 :(得分:0)

即使在system.exit(1)或引发异常时,默认的python模板似乎也会返回200。我认为其他较旧的模板的行为也类似,这是经典看门狗所期望的。

但是,如果您使用supports running the new of-watchdog, I think it can return non-200 codes, like 400, 404, etc.的语言模板,则可以使用faas-cli下载这些模板,它们来自openfaas-incubator项目和社区。

我刚刚使用来自openfaas-incubator的python3-http语言/模板进行了确认,并且csharp-httprequest from distantcam确认可以返回非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}");
        }
    }
}