0

我创建了一个测试 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");}

我的统一代码:

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 配置:请求凭据开启:启用访问控制允许凭据。功能设置始终打开。Integrate-Trigger:选定的方法 GET、POST。授权级别:功能。

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

应用服务身份验证:匿名

Unity-Azure sdk和 google 设置搜索结果似乎都已过时/不受支持 :( 我应该采取什么途径才能使其正常工作?很高兴尝试任何 sdk / unity 资产商店以达到您可能建议的天蓝色!干杯!

4

1 回答 1

1

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

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");
}

你可以在上面的代码中获取表单数据的key和value,然后将它们组合成json格式,然后执行DeserializeObject. 或者如果你想使用数据来创建一个对象,你甚至可以不做DeserializeObject,直接将值设置到你的对象中。

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

希望能帮助到你。

于 2020-03-03T08:17:12.483 回答