今天花的时间定好位之后试图将我的大脑围绕处理Web表单数据的旧方式以及WebAPI如何完成之间的(重要但强大的)范式转换进行,我想我会将2美分添加到此讨论中。
我想做什么(这对POST的Web表单处理非常常见)就是能够以任意顺序获取我想要的任何表单值。如果你有你的数据在System.Collections.Specialized.NameValueCollection
,就像你可以做的一样。但事实证明,在WebAPI中,来自POST的数据以流的形式返回给您。所以你不能直接做到这一点。
但是有一个很酷的小类FormDataCollection
(在System.Net.Http.Formatting中),它可以让你做的是迭代你的集合一次。
所以我写了一个简单的实用程序方法,它将运行一次FormDataCollection
并将所有值保存到NameValueCollection
中。完成此操作后,您可以将所有数据跳到您的内容。
所以在我ApiController派生类中,我有一个帖子方法是这样的:在我的静态WebAPIUtils类
public void Post(FormDataCollection formData)
{
NameValueCollection valueMap = WebAPIUtils.Convert(formData);
... my code that uses the data in the NameValueCollection
}
转换方法是这样的:
/// <summary>
/// Copy the values contained in the given FormDataCollection into
/// a NameValueCollection instance.
/// </summary>
/// <param name="formDataCollection">The FormDataCollection instance. (required, but can be empty)</param>
/// <returns>The NameValueCollection. Never returned null, but may be empty.</returns>
public static NameValueCollection Convert(FormDataCollection formDataCollection)
{
Validate.IsNotNull("formDataCollection", formDataCollection);
IEnumerator<KeyValuePair<string, string>> pairs = formDataCollection.GetEnumerator();
NameValueCollection collection = new NameValueCollection();
while (pairs.MoveNext())
{
KeyValuePair<string, string> pair = pairs.Current;
collection.Add(pair.Key, pair.Value);
}
return collection;
}
希望这有助于!
本页面应该回答你的问题:http://www.asp.net/web-api/overview/working-with-http/sending-html- form-data,-part-1 –
@JonnyS它做到了。这是一个耻辱,虽然,你反过来,因为否则我可以接受你的答案:) – Spook
http://stackoverflow.com/questions/13120971/how-to-get-post-values-with -asp-net-webapi – drzaus