首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure函数http触发器Unity3d 2019.3

Azure函数http触发器Unity3d 2019.3
EN

Stack Overflow用户
提问于 2020-03-03 06:58:39
回答 1查看 297关注 0票数 0

我已经创建了一个测试HTTP触发器azure函数。我可以在蔚蓝门户和浏览器上正确地触发它。但是,来自的触发器会产生"Error HTTP/1.1 500内部服务器错误“。

启动Azure函数:

代码语言:javascript
复制
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");}

我的统一代码:

代码语言:javascript
复制
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配置:请求凭据:启用访问-控制-允许-凭据。函数的设置总是打开的。集成触发器:选定的方法获取,发布。授权级别:功能。

代码语言:javascript
复制
function's host.json: "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[1.*, 2.0.0)"

App服务认证:匿名

统一-Azure,sdk和google安装搜索结果看起来都过时了/不被支持:(我应该采取什么方法让这个工作?乐意尝试任何sdk /统一资产商店,以达到您可能建议的天蓝色!干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-03 08:17:12

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

代码语言:javascript
复制
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);

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

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

代码语言:javascript
复制
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,只需将值直接设置到对象中。

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

希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60501681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档