【发布时间】:2016-12-15 09:22:45
【问题描述】:
如何在Azure函数中读取表单数据?我尝试了几种方法,但总是出现错误,例如:
using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
dynamic data = await req.Content.ReadAsFormDataAsync();
return req.CreateResponse(HttpStatusCode.OK, $" {data}");
}
错误:Exception while executing function: Functions.FormTrigger. System.Net.Http.Formatting: No MediaTypeFormatter is available to read an object of type 'FormDataCollection' from content with media type 'application/json'.
我检查了请求内容,我收到的请求是multipart/form-data:
" ------WebKitFormBoundary47wKq7pk9Fcc4H9J\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nsdgs\r\n
------WebKitFormBoundary47wKq7pk9Fcc4H9J\r\nContent-Disposition: form-data; name=\" _replyto\"\r\n\r\nsdg@sdg.com\r\n
------WebKitFormBoundary47wKq7pk9Fcc4H9J\r\nContent-Disposition: form-data; name=\"message\"\r\n\r\nsdgsd\r\n
------WebKitFormBoundary47wKq7pk9Fcc4H9J--\r\n"
感谢您的任何提示。
【问题讨论】:
-
请求内容的类型是什么?即,它是 - application/x-www-form-urlencoded,还是您有 application/json 内容? “ReadAsFormDataAsync”只接受“application/x-www-form-urlencoded”类型的内容。
-
@Nirman 我试过了,它可以工作,但总是从表达式中得到空结果,比如:data["message"]
-
你可以尝试阅读 - req.Content.ReadAsFormDataAsync().Result 吗?这应该为您提供名称-值集合
-
@Nirman 它返回给我类似的东西:pastebin.com/vnKsQQCb :( 我认为它与 Azure Functions 密切相关......
-
@Nirman 我发现了问题所在。您的第一条评论是正确的...我使用 Postman 对其进行了测试,并且表单数据位于
form-data部分而不是x-www-form-urlencoded部分。不幸的是,我的标题被忽略了。将其发布为答案,我会将其标记为答案。非常感谢!
标签: c# azure-functions azure-webjobssdk