当前位置: 首页 > 知识库问答 >
问题:

Web API表单数据收集

皇甫卓君
2023-03-14

我正在尝试将表单序列化值发布到控制器(WebAPI自宿主)。我无法理解为什么没有正确绑定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自主机的服务器端:

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);
                }
        }
}

非常感谢。

共有3个答案

谭翔
2023-03-14

谢谢你,斯科特。你的回答正是我需要的。基于此,我编写了下面的小实用程序方法,当它从流中提取所有数据值(使用FormDataCollection)并将它们放入NamedValueCollection(您可以按任何顺序访问)时,它会派上用场。

/// <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
 }
蓟俊杰
2023-03-14

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

NameValueCollection MyNameValueCollection = formData.ReadAsNameValueCollection();
罗法
2023-03-14

尝试FormDataCollection,而不是NameValueCollection。

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

 类似资料:
  • 数据应该传递给我的portlet类,但它不会。这是我的类代码: 这个类旨在将数据传递回JSP。方法工作正常,就像在jsp中一样,我可以使用但是,它总是返回“no-param”,这意味着返回null。 因此,似乎正确调用了我的方法,但它没有接收表单数据。错误在哪里,我错了什么? 我将portlet下载到我的本地机器上,部署到本地演示Liferay安装中,它工作了!所以代码应该是可以的,这一定是一些服

  • 我有一个谷歌表单,它将数据收集到电子表格中(表单响应1)。因为我认为有4m行的限制,所以如何以编程方式创建新的工作表并将响应存储到新创建的工作表中。 注意:这不是将响应复制到新工作表中。

  • Framework7 有一些方法可以让读取和填写表单数据变得非常方便: Form 转化成 JSON 使用 app 对应的方法可以非常方便把所有的表单元素转化成一个 JSON 对象: myApp.formToJSON(form) - 把表单转换成JSON对象 form - HTML元素 or 字符串 (CSS选择器) 返回一个JSON对象 <form id="my-form" class="list

  • 我正在尝试从接收包含3个参数的多部分请求: 一个 一个 我在控制器中接收到和fine,但json的所有字段都为NULL。会有什么问题吗? JSON 控制器 邮差

  • 很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序。浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。 GET 方法 GET 方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔,如下所示: http://www.test.com/hello?key1=value1&key2=value2 GET 方法是默

  • 问题内容: 有人可以告诉我推荐的(最新的)方式来快速获取POST表单数据。 如此多的教程/帖子等都谈论bodyParser,但Express不再捆绑它,其他博客等建议直接使用urlencoded,但现在也不可用。 我一直在努力寻找有关这些框架或技术的准确信息。 顺便说一句,我很感兴趣的是非常简单的小型数据 问题答案: 您应该通过安装。现在,它作为一个单独的中间件来了。 之后,在您的app.js中添