我正在用C#学习AWS Lambda。我的函数看起来有点像:
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace Function_Redeem
{
public class Function
{
public FunctionOutput FunctionHandler(FunctionInput input, ILambdaContext context)
{
// do work with input
// return FunctionOutput
}
public class FunctionInput
{
public string someData { get; set; }
}
public class FunctionOutput
{
public string someAnswer { get; set; }
}
}
}
当使用AWS中的"测试"按钮以及Visual Studio中的测试功能时,它工作得很好。
现在,我试着从Unity那里打电话给你。
因此,首先,我添加了一个API网关触发器,并保留了默认值:
API endpoint: [the url]
API type: HTTP
Authorization: NONE
Cross-origin resource sharing (CORS): No
Enable detailed metrics: No
Method: ANY
Resource path: /FunctionName
Stage: default
然后在Unity,
private static IEnumerator TestFunction(string uri, string data)
{
UnityWebRequest webRequest = UnityWebRequest.Put(uri, data);
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError)
Debug.LogError("Network error: " + webRequest.error);
else
Debug.Log(webRequest.downloadHandler.text);
}
我称之为,data
是
{"someData":"Hello"}
函数调用工作,我知道它正在到达我的函数,但输入数据(即someData
字段(为空。它似乎没有解析我发送的数据,所以FunctionInput
默认为空someData
。
我错过了什么?
由于您使用API网关作为lambda函数的触发器,请接受APIGatewayProxyRequest作为处理程序的输入参数(而不是FunctionInput(。字段Body将具有您的序列化有效载荷{"someData":"Hello"}
public class Function
{
public FunctionOutput FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
{ var requestBody = JsonConvert.DeserializeObject<FunctionInput>(request.Body);
// do work with input
// return FunctionOutput
}
public class FunctionInput
{
public string someData { get; set; }
}
public class FunctionOutput
{
public string someAnswer { get; set; }
}
}
}