簡體   English   中英

.Net Core 3.1 AWS Lambda 在測試體中通過 Json 時出錯

[英].Net Core 3.1 AWS Lambda error when passing Json in test body

我正在嘗試測試我的 AWS Lambda.Net Core 3.1 API。

我使用 AWS 工具為 Visual Studio 創建了一個標准應用程序並添加了我的 AesController。 正文參數中沒有參數的標准 Get 請求工作正常,但是當我嘗試使用參數調用 Get 請求時,我收到“ 400 Bad Request ”異常, “JSON 值無法轉換為 System.String。路徑:$ | LineNumber: 0 | BytePositionInLine:1。”

測試 function:

[Fact]
    public async Task TestGetEncrypt()
    {
        var lambdaFunction = new LambdaEntryPoint();

        var requestStr = File.ReadAllText("./SampleRequests/AesController-GetEncrypt.json");
        var request = JsonConvert.DeserializeObject<APIGatewayProxyRequest>(requestStr);
        var context = new TestLambdaContext();
        var response = await lambdaFunction.FunctionHandlerAsync(request, context);

        Assert.Equal(200, response.StatusCode);
        Assert.Equal("뺕結確᫷", response.Body);
        Assert.True(response.MultiValueHeaders.ContainsKey("Content-Type"));
        Assert.Equal("application/json; charset=utf-8",
            response.MultiValueHeaders["Content-Type"][0]);
    }

設置 Json:

{
  "resource": "/{proxy+}",
  "path": "/aes/GetEncrypt",
  "httpMethod": "GET",
  "headers": {
       "Content-Type": "application/json"
  },
  "queryStringParameters": null,
  "pathParameters": {
    "proxy": "aes/GetEncrypt"
  },
  "stageVariables": null,
  "requestContext": {
    "accountId": "AAAAAAAAAAAA",
    "resourceId": "5agfss",
    "stage": "test-invoke-stage",
    "requestId": "test-invoke-request",
    "identity": {
      "cognitoIdentityPoolId": null,
      "accountId": "AAAAAAAAAAAA",
      "cognitoIdentityId": null,
      "caller": "BBBBBBBBBBBB",
      "apiKey": "test-invoke-api-key",
      "sourceIp": "test-invoke-source-ip",
      "cognitoAuthenticationType": null,
      "cognitoAuthenticationProvider": null,
      "userArn": "arn:aws:iam::AAAAAAAAAAAA:root",
      "userAgent": "Apache-HttpClient/4.5.x (Java/1.8.0_102)",
      "user": "AAAAAAAAAAAA"
    },
    "resourcePath": "/{proxy+}",
    "httpMethod": "GET",
    "apiId": "t2yh6sjnmk"
  },
  "body": "{\"Data\": \"test_me!\"}"
}

API 獲取 Function

    // GET aes/Encrypt
    [HttpGet("GetEncrypt")]
    public async Task<IActionResult> GetEncrypt([FromBody] string content)
    {
        var jsonConvert = JsonConvert.DeserializeObject<JsonAes>(content);
        var aesCrypt = new AesCrypt(jsonConvert);

        return Ok(Encoding.Unicode.GetString(await aesCrypt.CryptAes()));
    }

我相信我在設置 JSON 中的“body”參數做錯了。 我試圖通過沒有“”的普通 JSON 格式,但我得到了同樣的錯誤。

我設法找到解決方案。 我需要編輯獲取請求 function 參數以指向 object 而不是普通字符串。

正確的代碼:

    // GET aes/Encrypt
    [HttpGet("GetEncrypt")]
    public async Task<IActionResult> GetEncrypt([FromBody] JsonAes content)
    {
        var aesCrypt = new AesCrypt(content);

        return Ok(Encoding.Unicode.GetString(await aesCrypt.CryptAes()));
    }

暫無
暫無

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

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