【发布时间】:2017-07-14 07:20:12
【问题描述】:
我正在尝试用 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 日志消息。
附带说明,我可以通过将以下内容添加到我的 project.json 文件中来消除 Unable to resolve 'Amazon.Lambda.Core (>= 1.0.0)' for '.NETCoreApp,Version=v1.0' 错误:
"runtimes": {
"win10-x64": {},
"win81-x64": {},
"win8-x64": {},
"win7-x64": {}
}
这在 Windows 机器上是有道理的,在亚马逊上就没有那么多了。我需要一些不同的runtime(s)吗?
该更改并未更改 JsonReaderException 异常。
我尝试添加"Linux": {},但这也没有改变。
我什至尝试将 NuGet 包 Microsoft.NETCore.App 从 1.0.0 更新为 1.1.0,但也没有任何效果,甚至返回到 1.0.1。
我认为他们给你的默认示例会起作用,但我错了。 Amazon.Lambda.Serialization.Json.JsonSerializer 属性似乎存在问题。是否可以只使用NewtonSoft?
【问题讨论】:
-
回复:“但是,就我而言,这似乎是一个错误。默认情况下,字符串可以为空......” - 未引用的
null是有效的 JSON,如果通过了进入一个需要字符串的函数,字符串参数将为空。这可以通过使用 AWS Lambda 控制台并指定null作为测试 JSON 有效负载来验证,但 不是 AWS VS Toolkit,因为 Toolkit 将不带引号的文本视为字符串(为方便起见)并引用它在将其传递给 Lambda 之前。
标签: c# amazon-web-services aws-lambda