簡體   English   中英

如何使用 AWS Gateway 獲取 Lambda 以在 C# 中返回 HTTP 錯誤狀態代碼

[英]How can I get a Lambda using AWS Gateway to return HTTP error status code in C#

我正在嘗試通過我的 AWS Gateway 返回狀態錯誤代碼(例如 500、400、401),但似乎無法弄清楚。

我看過一些例子,他們做了類似的事情:

return context.fail('Bad Request: You submitted invalid input');

但是, ILambdaContext對象上沒有失敗或成功方法。

這是我到目前為止所得到的(非工作)

拉姆達代碼:

 var addressresponse = new AddressValidationResponse();
            addressresponse.Errors = new string[1];
            addressresponse.Errors[0] = "test error";
            addressresponse.Reason = "client_error";

 return addressresponse;

自定義錯誤模型

整合響應

方法響應

我想我已經接近了,但我仍然得到了 200 的回復,回復如下:

{
  "Reason": "client_error",
  "Errors": [
    "test error"
  ]
}

我在這里想念什么?

您需要在 C# lambda 函數中引發異常,並使用 API 網關控制台將特定錯誤代碼映射到響應映射模板中的 HTTP 響應代碼。

您可以使用 APIGatewayHttpApiV2ProxyResponse 來包裝您的響應,如下所示:

public static async Task<APIGatewayHttpApiV2ProxyResponse?> FunctionHandler(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context)
{
    var response = new APIGatewayHttpApiV2ProxyResponse();
    try
    {
        response.Body = await DoSomeWorkAsync();
        response.StatusCode = (int)HttpStatusCode.OK;
    }
    catch (Exception ex)
    {
        response.StatusCode = (int)HttpStatusCode.InternalServerError;
        response.Body = JsonSerializer.Serialize(new { error = ex.Message }) ;
    }

    return response;
}

在這里回答了類似的問題

基本上,您需要返回 APIG 識別的響應對象。

這里有 C# 示例

我會說我在上下文 Lambda 中不使用 C#,基本上你需要返回標頭、狀態代碼和響應正文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM