Azure函数http触发器Unity3d 2019.3



我创建了一个测试HTTP触发器azure函数。我可以在azure门户和浏览器上正确触发它。然而,Unity编辑器的触发器给出"错误HTTP/1.1 500内部服务器错误"。

启动Azure功能:

public static async Task<IActionResult> Run(HttpRequest req, ILogger log){
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");}

我的Unity代码:

formData.Add(new MultipartFormDataSection("name", "SampleName", "text/plain"));
UnityWebRequest www = UnityWebRequest.Post("https://samplefunction.azurewebsites.net/api/HttpTriggerTest?herelongblob", formData);
yield return www.SendWebRequest();

Azure CORS配置:请求凭据打开:启用访问控制允许凭据。函数设置始终打开。集成触发器:所选方法GET、POST。授权级别:功能。

function's host.json: "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[1.*, 2.0.0)"

应用程序服务身份验证:匿名

Unity Azure sdk和谷歌设置搜索结果似乎都过时了/不受支持:(请问我该走哪条路去上班?很乐意尝试您可能建议的任何sdk/unity资产商店来访问azure!干杯

错误发生在代码中的以下两行:

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);

由于您在代码中设置了text/plain。因此,当您执行www.SendWebRequest()时,它将发送表单数据,而不是json格式的数据。因此,它将显示错误消息。

下面我提供的代码供您参考:

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
var arr = req.Form.Keys;
foreach (var key in arr) {
log.LogInformation(key);
log.LogInformation(req.Form[key]);
}
return (ActionResult)new OkObjectResult("success");
}

您可以在上面的代码中获得表单数据的键和值,然后将它们组合为json格式,然后执行DeserializeObject。或者,如果您想使用数据创建对象,您甚至可以不执行DeserializeObject,而直接在对象中设置值。

顺便说一下,您也可以尝试将代码new MultipartFormDataSection("name", "SampleName", "text/plain")中的text/plain更改为application/json。但是,由于我对MultipartFormDataSection了解不多,所以我不确定这个解决方案是否可行。

希望能有所帮助。

最新更新