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)
做同样的事情,其中 req
是 HttpRequestMessage
,但我试图坚持 2.x template/standard
补充说明:上述代码应returnHTTP 400 Bad Request
,defReturn
作为对客户端的响应正文。但是当我将 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 提供额外的格式化选项。
我有一个 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)
做同样的事情,其中 req
是 HttpRequestMessage
,但我试图坚持 2.x template/standard
补充说明:上述代码应returnHTTP 400 Bad Request
,defReturn
作为对客户端的响应正文。但是当我将 defCode
更改为 HttpStatusCode.Accepted
时,它应该 return HTTP 202 Accepted
具有相同的响应主体。我怎样才能做到这一点?
补充说明#2:(如果我没记错的话)在 ASP.NET Core 1.x 中我完全可以这样做,returning IActionResult
通过调用静态方法 StatusCode
而不是 StatusCodes
(这是一个包含 HTTP 代码常量
谢谢
您可以创建一个模型 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 提供额外的格式化选项。