Azure功能 - 如何读取表单数据

时间:2016-12-15 09:22:45

标签: c# azure-functions azure-webjobssdk

如何阅读 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"

感谢您的任何提示。

2 个答案:

答案 0 :(得分:5)

由于请求包含&#34; application / x-www-form-urlencoded&#34;内容类型,您需要将输入转换为NameValueCollection以读取输入:

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

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

答案 1 :(得分:0)

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

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