MVC 5 WebApi FormDataCollection将数据复制为NameValueCollection

时间:2017-12-16 21:43:01

标签: c# asp.net-web-api2 .net-4.7

我有一个外部服务,将电子邮件作为表单数据发送到MVC 5 WebApi端点。由于字段可以更改,我尝试将POST主体作为ReadAsNameValueCollection接收。当我调用recipient=test%40example.com&sender=user%40gmail.com&subject=subject&from=UserName+%3Cuser%40gmail.com%3E方法时,结果与POSTed数据不一致。

例如,原始表单数据的开头如下所示:

recipient = test@example.com sender = user@gmail.com subject = subject from = UserName <user@gmail.com>

经过一些URL解码后,值应该

NameValueCollection

但是当我转换为subject = subject,subject from = UserName <user@gmail.com>,UserName <user@gmail.com> 并迭代键和值时,会返回几个值作为由逗号分隔的两个数据副本:

subject

我的测试电子邮件中有26个字段(例如,如果有附件,则会有所不同),此问题仅影响frompublic async Task<IHttpActionResult> ReceiveEmail(FormDataCollection postBody) { NameValueCollection email = postBody.ReadAsNameValueCollection(); // Debug: dump key/vals StringBuilder sb = new StringBuilder(); foreach(string key in email.AllKeys) sb.AppendLine($"{key} == {email[key]}"); await BlobWriter.Write("debug-container", "email.txt", sb.ToString()); return Ok(); } 字段,如上所示 - 这些只是纯文本,没有什么特别之处。

有人知道导致这种情况的原因或如何避免吗?

编辑:发布代码,但我之前没有打扰,因为它实际上就像获取输入参数和转换一样简单。 (BlobWriter只是一个将字符串写入Azure blob存储的辅助类。)

FormDataCollection

编辑2:我还应该注意,从postBody.Get("subject")请求特定的键/值(而不是迭代地转储它们)确认了不正确的内容。例如,subject,subject会产生 $(document).ready(function() { $('#calendar').fullCalendar({ themeSystem: 'bootstrap3', firstDay: 1, footer: { right: 'month basicWeek listDay' } }); }); 作为存储值。

0 个答案:

没有答案