Azure Function,returning 状态代码 + JSON,没有在逻辑的每个部分定义 return

Azure Function, returning status code + JSON, without defining return in every part of logic

我有一个 Azure 函数 2.x 驻留在静态 class 上,看起来像这样

[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 template/standard

补充说明:上述代码应returnHTTP 400 Bad RequestdefReturn作为对客户端的响应正文。但是当我将 defCode 更改为 HttpStatusCode.Accepted 时,它应该 return HTTP 202 Accepted 具有相同的响应主体。我怎样才能做到这一点?

补充说明#2:(如果我没记错的话)在 ASP.NET Core 1.x 中我完全可以这样做,returning IActionResult 通过调用静态方法 StatusCode 而不是 StatusCodes(这是一个包含 HTTP 代码常量

的静态 class

谢谢

您可以创建一个模型 class,您可以在其中定义两个属性,即一个是您的状态代码,一个是您的 Json 对象,稍后您可以 return完整的模型。代码示例如下所示:

public static class QueueTriggerTableOutput
{
    [FunctionName("QueueTriggerTableOutput")]
    [return: Table("outTable", Connection = "MY_TABLE_STORAGE_ACCT_APP_SETTING")]
    public static Person Run(
        [QueueTrigger("myqueue-items", Connection = "MY_STORAGE_ACCT_APP_SETTING")]JObject order,
        ILogger log)
    {
        return new Person() {
                PartitionKey = "Orders",
                RowKey = Guid.NewGuid().ToString(),
                Name = order["Name"].ToString(),
                MobileNumber = order["MobileNumber"].ToString() };
    }
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

在接收端,您可以同时捕获 属性。

P.S.- 您必须更改函数的 return 类型。

希望对您有所帮助。

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

选项 1:默认代码

这在博客上有详细说明Here

200 和 400 等一些代码是预定义的,可供

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

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

选项2:手动设置代码

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

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

using Microsoft.AspNetCore.Http;

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

在这个例子中,Statuscode 是从 StatusCodes class 中使用的,但您也可以使用输入其他代码(通常,只需坚持这些代码)

另外,如果需要,ObjectResult class 提供额外的格式化选项。