我正在尝试在C#中编写AWS Lambda函数。我拥有适用于Visual Studio 2015的AWS工具包。我使用AWS Lambda项目(.Net Core)创建了一个项目,然后选择了空函数选项。这给了我下面的代码:C#中的Amazon Lambda - JsonReaderException
UPDATE & ANSWER 17年2月24日 - 注释标记为答案是有用的知识,但不是我实际的答案。这是@PavelSafronov的评论,在那个答案,做了伎俩。我要么通过什么都没有(并得到错误),或者我认为它要我以JSON格式提供信息,所以我会输入{ "input": "Some string" }
,仍然会出现错误。现在,我刚刚通过“一些字符串”它的工作。 但是,就我而言,这看起来像一个错误。一个string
是默认nullable
和亚马逊编写的代码即使假设它可以通过虚拟的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机器上的意义,与其说这里亚马逊。我需要一些不同的runtime(s)
吗?
该更改没有改变JsonReaderException
例外。
我试着加入"Linux": {}
但是那也没有改变。
我甚至试图从1.0.0
更新NuGet包Microsoft.NETCore.App
到1.1.0
并没有采取任何行动,以及甚至回1.0.1
。
我想他们给你的默认例子会工作,但我错了。看起来好像Amazon.Lambda.Serialization.Json.JsonSerializer
属性存在问题。是否可以使用NewtonSoft
?
回复:“但是,尽可能我担心,这看起来像一个bug。一个字符串默认为空值...“ - 不带引号的空值是有效的JSON,如果它传递给一个需要字符串的函数,字符串参数将为空。这可以通过使用AWS Lambda控制台并指定'null'作为测试JSON有效负载来验证,而不是* AWS *工具包,因为Toolkit会将未加引号的文本视为字符串(为了方便起见)并在将其传递到Lambda之前引用它。 –