Ich versuche, eine AWS Lambda-Funktion in C# zu schreiben. Ich habe das AWS Toolkit für Visual Studio 2015. Ich habe ein Projekt mit dem AWS Lambda-Projekt (.Net Core) erstellt und dann die Option Leere Funktion ausgewählt. Welche gab mir den folgenden Code:Amazon Lambda in C# - JsonReaderException
UPDATE & ANTWORT 02/24/17 - Der Kommentar markierte als die Antwort nützliches Wissen war, aber nicht die eigentliche Antwort für mich. Es war @PavelSafronov 's Kommentar in dieser Antwort, die den Trick gemacht hat. Ich gab entweder nichts ein (und bekam den Fehler) oder ich nahm an, dass es wollte, dass ich die Informationen im JSON-Format gebe, also würde ich { "input": "Some string" }
eingeben und immer noch den Fehler bekommen. Jetzt, wo ich "Some string" übergeben habe, hat es funktioniert. Allerdings, so weit es mich betrifft, scheint dies wie ein Fehler. A string
ist standardmäßig nullable
und der Code geschrieben von Amazon geht sogar davon aus, dass es virtuell von der input?.ToUpper()
sein könnte, wo die ?.
auf null
prüft.
Hinweis:Ich habe die LambdaLogger.Log
Linien und die Constructor
zu sehen, wo ich war immer:
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();
}
}
}
Der Ausgabebildschirm und Lösung Explorer sagte:
Errors in C:\Test Projects\AWSLambda1\AWSLambda1\AWSLambda1.xproj
Unable to resolve 'Amazon.Lambda.Core (>= 1.0.0)' for '.NETCoreApp,Version=v1.0'.
jedoch Dies erstellt und veröffentlicht in AWS ohne Fehler. Ich kann es auch aufrufen, die gibt die folgende - Und ist meine Hauptfrage:
{
"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)"
]
}
Die Log-Datei zeigte, dass die Constructors
Lognachricht bekam es aber nicht die tatsächliche KevingsTestFunction
Protokollmeldung.
Auf einer Seite zur Kenntnis, ich bin in der Lage, die Unable to resolve 'Amazon.Lambda.Core (>= 1.0.0)' for '.NETCoreApp,Version=v1.0'
Fehler zu erhalten, indem Sie folgende meine project.json
Datei zu gehen weg:
"runtimes": {
"win10-x64": {},
"win81-x64": {},
"win8-x64": {},
"win7-x64": {}
}
Welchen Sinn auf einem Windows-Rechner auf Amazon, nicht so viel hier macht . Brauche ich etwas anderes runtime(s)
?
Diese Änderung hat die JsonReaderException
Ausnahme nicht geändert.
Ich habe versucht, "Linux": {}
hinzuzufügen, aber das machte auch keine Änderung.
Ich versuchte sogar, als auch das NuGet Paket Microsoft.NETCore.App
1.0.0
-1.1.0
und das tat nichts zu aktualisieren und sogar zu 1.0.1
zurück.
Ich würde das Standardbeispiel, das sie geben, würden Sie arbeiten, aber ich bin da falsch. Offenbar gibt es Probleme mit dem Attribut Amazon.Lambda.Serialization.Json.JsonSerializer
. Ist es möglich, einfach NewtonSoft
zu verwenden?
Re: "Allerdings so weit Ich bin besorgt, dies scheint wie ein Fehler. Eine Zeichenfolge ist standardmäßig Nullable ... "- Unquoted" null "ist gültig JSON, und wenn das in einer Funktion, die eine Zeichenfolge erwartet übergeben wird, wird der Parameter string null sein. Dies kann durch Verwendung der AWS Lambda Console und Angabe von 'null' als Test-JSON-Payload, aber * nicht * des AWS VS-Toolkits verifiziert werden, da das Toolkit nicht aufgeführten Text als String behandelt und vor dem Übergeben an Lambda anführt . –