Web API表单数据收集

我正在尝试将表单序列化值发布到控制器(Web API Self Host)。 我无法理解为什么NameValueCollection没有正确绑定。 客户端使用jQuery:

// Form Submit Handler $( '#form-parameters' ).submit(function (event) { event.preventDefault(); var formData = $(this).serialize(); // Post serialized form data postAssemblyParameters(formData); }); // Post Form Data to controller test function postAssemblyParameters(formData){ $.ajax({ url: http://localhost/api/test/1, type: 'POST', data: formData, dataType: 'application/x-www-form-urlencoded', success: function(x3d) { }, error: function(xhr) { } }); } 

服务器端使用Web API Self Host:

 public void Post([FromUri] int id, [FromBody] NameValueCollection formData) { Console.WriteLine(id); // OK // Collection is NULL foreach (var key in formData.AllKeys) { foreach (var val in formData.GetValues(key)) { Console.WriteLine(key + ": " + val); } } } 

非常感谢。

而不是NameValueCollection,尝试FormDataCollection。

http://weblogs.asp.net/cibrax/archive/2012/08/10/binding-form-data-in-asp-net-web-api.aspx

或者您可以使用构建“ReadAsNameValueCollection”,如下所示:

 NameValueCollection MyNameValueCollection = formData.ReadAsNameValueCollection(); 

谢谢斯科特。 你的答案正是我所需要的。 基于它,我编写了以下小实用工具方法,它将派上用场的所有数据值(使用FormDataCollection)并将它们放入NamedValueCollection(您可以按任何顺序访问)。

 ///  /// 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 }