今天花了很多时间试图把我的大脑围绕在处理Web表单数据的旧方式和如何用WebAPI完成之间的(重要但强大的)范式转换之后,我想我会把2美分添加到这个讨论。
我想做什么(这对于POST的Web表单处理来说很常见)就是能够以任何顺序获取我想要的任何表单值。 像你可以做,如果你有你的数据在System.Collections.Specialized.NameValueCollection 。 但事实certificate,在WebAPI中,来自POST的数据以stream的forms返回给您。 所以你不能直接做到这一点。
但是有一个叫FormDataCollection (在System.Net.Http.Formatting中)的很酷的小类,它可以让你做一次遍历你的集合。
所以我写了一个简单的实用程序方法,它将通过FormDataCollection运行一次并将所有值粘贴到NameValueCollection 。 一旦完成,您可以将所有数据跳到您的内容。
所以在我的ApiController派生类中,我有一个像这样的post方法:
public void Post(FormDataCollection formData) { NameValueCollection valueMap = WebAPIUtils.Convert(formData); ... my code that uses the data in the NameValueCollection }
我的静态WebAPIUtils类中的Convert方法如下所示:
/// /// Copy the values contained in the given FormDataCollection into /// a NameValueCollection instance. /// /// The FormDataCollection instance. (required, but can be empty) /// The NameValueCollection. Never returned null, but may be empty. public static NameValueCollection Convert(FormDataCollection formDataCollection) { Validate.IsNotNull("formDataCollection", formDataCollection); IEnumerator> pairs = formDataCollection.GetEnumerator(); NameValueCollection collection = new NameValueCollection(); while (pairs.MoveNext()) { KeyValuePair pair = pairs.Current; collection.Add(pair.Key, pair.Value); } return collection; }
希望这可以帮助!