我已经创建了一个测试HTTP触发器azure函数。我可以在蔚蓝门户和浏览器上正确地触发它。但是,来自的触发器会产生"Error 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配置:请求凭据:启用访问-控制-允许-凭据。函数的设置总是打开的。集成触发器:选定的方法获取,发布。授权级别:功能。
function's host.json: "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[1.*, 2.0.0)"App服务认证:匿名
统一-Azure,sdk和google安装搜索结果看起来都过时了/不被支持:(我应该采取什么方法让这个工作?乐意尝试任何sdk /统一资产商店,以达到您可能建议的天蓝色!干杯!
发布于 2020-03-03 08:17:12
错误发生在代码中的以下两行:
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,只需将值直接设置到对象中。
顺便说一句,您还可以尝试在代码text/plain中将application/json更改为new MultipartFormDataSection("name", "SampleName", "text/plain")。但是,由于我对MultipartFormDataSection不太了解,所以我不确定这个解决方案是否有效。
希望能帮上忙。
https://stackoverflow.com/questions/60501681
复制相似问题