gpt4 book ai didi

c# - C# 中的 Amazon Lambda - JsonReaderException

转载 作者:太空狗 更新时间:2023-10-29 17:42:59 26 4
gpt4 key购买 nike

我正在尝试用 C# 编写 AWS Lambda 函数。我有 AWS Toolkit for Visual Studio 2015。我使用 AWS Lambda 项目 (.Net Core) 创建了一个项目,然后选择了 Empty Function 选项。这给了我以下代码:

UPDATE & ANSWER 02/24/17 - 标记为答案的评论是有用的知识,但对我来说不是实际答案。 @PavelSafronov 在那个答案中的评论起到了作用。我要么没有传递任何内容(并收到错误),要么我假设它希望我以 JSON 格式提供信息,所以我会输入 { "input": "Some string"} 并仍然得到错误。现在我刚刚传入“Some string”,它起作用了。 但是,就我而言,这似乎是一个错误。 string 默认是 nullable 并且 Amazon 编写的代码 甚至假设它可以是 input?.ToUpper( ) ?. 正在检查 null

注意: 我添加了 LambdaLogger.Log 行和 Constructor 以查看我得到了什么:

using Amazon.Lambda.Core;
using Amazon.Lambda.Serialization.Json;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(JsonSerializer))]

namespace AWSLambdaTest1 {

public class Function {

public Function() {
LambdaLogger.Log("Within the Constructor");
}

public string KevinsTestFunction(string input, ILambdaContext context) {
LambdaLogger.Log("Within the KTF");
return input?.ToUpper();
}

}
}

输出屏幕和解决方案资源管理器显示:

Errors in C:\Test Projects\AWSLambda1\AWSLambda1\AWSLambda1.xproj
Unable to resolve 'Amazon.Lambda.Core (>= 1.0.0)' for '.NETCoreApp,Version=v1.0'.

但是,这将构建并发布到 AWS 而不会失败。我什至可以调用它返回以下内容 - 这是我的主要问题:

{
"errorType" : "JsonReaderException",
"errorMessage" : "Unexpected character encountered while parsing value: {. Path '', line 1, position 1.",
"stackTrace" : [
"at Newtonsoft.Json.JsonTextReader.ReadStringValue(ReadType readType)",
"at Newtonsoft.Json.JsonTextReader.ReadAsString()",
"at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)",
"at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)",
"at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)",
"at Newtonsoft.Json.JsonSerializer.Deserialize[T](JsonReader reader)",
"at lambda_method(Closure , Stream , Stream , ContextInfo )"
]
}

日志文件显示 Constructors 日志消息到达那里,但不是实际的 KevingsTestFunction 日志消息。

附带说明,我能够得到 Unable to resolve 'Amazon.Lambda.Core (>= 1.0.0)' for '.NETCoreApp,Version=v1.0' 错误将以下内容添加到我的 project.json 文件中:

"runtimes": {
"win10-x64": {},
"win81-x64": {},
"win8-x64": {},
"win7-x64": {}
}

这在 Windows 机器上有意义,但在 Amazon 上就不是那么回事了。我需要一些不同的运行时吗?

该更改不会更改 JsonReaderException 异常。

我尝试添加 "Linux": {},但也没有任何改变。

我什至尝试将 NuGet 包 Microsoft.NETCore.App1.0.0 更新到 1.1.0 并且什么也没做好吧,甚至回到 1.0.1

我想他们给你的默认示例是可行的,但我错了。 Amazon.Lambda.Serialization.Json.JsonSerializer 属性似乎存在问题。是否可以只使用 NewtonSoft

最佳答案

帕维尔·萨夫罗诺夫 -

是的,如果您的 Lambda 函数入口点是:

public string KevinsTestFunction(string input, ILambdaContext context) {

那么你可以输入的字符串是:

"{ \"input\": \"Something\" }"

您还可以将 Lambda 函数入口点更改为:

public string KevinsTestFunction(JObject input, ILambdaContext context) {

然后你可以像这样输入一个json对象:

{ "input": "Something" }

如果您不需要任何输入而只是轮询 SQS 队列或 DynamoDb 表,那么您可以将 Lambda 函数的入口点更改为:

public string KevinsTestFunction(ILambdaContext context) {

许多变化可以玩。


现在根据原始问题的更新,默认情况下,AWS Web 控制台测试区域将为您设置默认测试数据以发送到您的 Lambda 函数。该默认测试数据是一个 JSON 对象。如前所述,它与通过 AWS SDK 通过 Visual Studio 提供的 C# Lambdas(接受字符串输入)的默认模板不一致。也许这是一个内置的绊脚石(功能),迫使我们遇到这个问题,把我们的头发拉到它上面,然后意识到函数处理程序的多功能性......

关于c# - C# 中的 Amazon Lambda - JsonReaderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42422040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com