【问题标题】:Azure functions - How to read form dataAzure 函数 - 如何读取表单数据
【发布时间】: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


【解决方案1】:

由于请求包含“application/x-www-form-urlencoded”类型的内容,您需要将输入转换为NameValueCollection才能读取输入:

NameValueCollection col = req.Content.ReadAsFormDataAsync().Result; 
return req.CreateResponse(HttpStatusCode.OK, $" {col[0]}");

您还可以传递 Key 字符串而不是 Index,这将使代码更具可读性和不言自明

【讨论】:

    【解决方案2】:

    为了读取表单数据,有ReadAsMultipartAsync方法:

    data = await req.Content.ReadAsMultipartAsync().ConfigureAwait(false);
    

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 2019-11-13
      • 1970-01-01
      • 2018-11-26
      • 2016-08-18
      • 1970-01-01
      • 2017-05-14
      • 2022-11-09
      • 1970-01-01
      相关资源
      最近更新 更多