c# - Azure Function,返回状态码+JSON,无需在每个逻辑部分定义返回

标签 c# azure azure-functions asp.net-core-2.1

我有一个 Azure Function 2.x,它驻留在一个静态类上,如下所示

[FunctionName("Register")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest req, ILogger log)
{
    MyTypeClass defReturn = new MyTypeClass();
    HttpStatusCode defCode = HttpStatusCode.BadRequest;

    /*
    * Logics that might or might not changes
    * defReturn and defCode value
    */

    return StatusCode((int) defCode, JsonConvert.SerializeObject(defReturn))
}

我如何实现return StatusCode((int) defCode, JsonConvert.SerializeObject(defReturn))部分? Azure Functions 2.x 中是否有此类方法或等效方法?

在 Azure Functions 1.x 中,我可以使用 req.CreateResponse(defCode, defReturn) 执行等效操作,其中 reqHttpRequestMessage ,但我我试图坚持使用 2.x 模板/标准

附加说明:上述代码应返回 HTTP 400 Bad Request ,并使用 defReturn 作为对客户端的响应正文。但是,当我将 defCode 更改为 HttpStatusCode.Accepted 时,它应该返回具有相同响应正文的 HTTP 202 Accepted 。我怎样才能实现这个目标?

附加解释#2:(如果我没记错的话)在 ASP.NET Core 1.x 中我完全可以这样做,通过调用静态方法 StatusCode 返回 IActionResult不是 StatusCodes (这是一个包含 HTTP 代码常量的静态类

谢谢

最佳答案

回复很晚了,但我今天遇到了同样的问题,所以也许这对其他搜索者有帮助

选项 1:默认代码

这在博客Here中有详细说明。

一些代码(例如 200 和 400)是预定义的,可供使用

return new OkObjectResult("Your message"); // 200
return new BadRequestObjectResult("Your error message"); // 400

这些功能并不适用于所有已知的状态代码,但适用于一些最常见的状态代码。

选项2:手动设置代码

如果您需要默认情况下未提供的特定代码,您可以使用基类并自行创建它们。

例如,要实现茶壶响应,您可以使用

using Microsoft.AspNetCore.Http;

var result = new ObjectResult("Your message");
result.StatusCode = StatusCodes.Status418ImATeapot;
return result;

在此示例中,使用 StatusCodes 类中的 Statuscode,但您也可以输入其他代码(通常只需坚持这些代码)

此外,如果需要,ObjectResult 类还提供其他格式选项。

关于c# - Azure Function,返回状态码+JSON,无需在每个逻辑部分定义返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74198988/

相关文章:

c# - System.Timers.Timer 不工作编辑 [在 asp.net web 表单中]

Azure存储静态网站安全问题

azure - 是否可以在运行时从数据工厂中的 Azure 函数链接服务内部读取参数?

java - Intellij 社区版中的 Azure 函数应用程序无法验证函数运行时 : Cannot run program "java": error=2, 没有这样的文件或目录

linux - 无法使用 CLI 将 Azure Function 发布到 Linux

c# - 按钮 FontWeight 不起作用

c# - 如何使用 imagemagick 调整图像大小?

c# - 什么是专门的事件、字段、方法和属性?

django - 如何使我的 azure django 项目成为 https?

c# - Entity Framework 中的 Datetime.UtcNow 查询的计算结果与 C# IL 中的 DateTime.UtcNow 不同