【问题标题】:Sending input parameters to AWS Lambda function from Unity从 Unity 向 AWS Lambda 函数发送输入参数
【发布时间】:2021-08-28 05:23:26
【问题描述】:

我正在使用 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 Gateway 触发器,并保留默认值:

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 默认为 null someData

我错过了什么?

【问题讨论】:

    标签: c# amazon-web-services unity3d aws-lambda


    【解决方案1】:

    由于您使用 API Gateway 作为 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; }
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多