Asp.net web api ASP.NET Web API-如何传递未知数量的表单编码的POST值

Asp.net web api ASP.NET Web API-如何传递未知数量的表单编码的POST值,asp.net-web-api,Asp.net Web Api,我的应用程序的前端可以在表单中发送未知数量的POST值。例如,在某些情况下,将有3个值来自某些文本框,在某些情况下,将有6个值来自文本框、下拉列表等。后端是ASP.NET Web API。我知道,在任何POST操作中,可以使用FromURI属性在URI参数中向“POST操作”传递一个简单的.NET值,并使用FromBody属性在body中传递和获取一个复杂类型。但是在我的例子中,表单数据值的数量不是常数而是可变的,我不能使用预定义的类来保存使用“FromBody”属性的值 如何处理这种情况?尝试

我的应用程序的前端可以在表单中发送未知数量的POST值。例如,在某些情况下,将有3个值来自某些文本框,在某些情况下,将有6个值来自文本框、下拉列表等。后端是ASP.NET Web API。我知道,在任何POST操作中,可以使用FromURI属性在URI参数中向“POST操作”传递一个简单的.NET值,并使用FromBody属性在body中传递和获取一个复杂类型。但是在我的例子中,表单数据值的数量不是常数而是可变的,我不能使用预定义的类来保存使用“FromBody”属性的值


如何处理这种情况?

尝试将此属性作为属性列表发送。使模型如下所示:

public class PostModel
{
    public IEnumerable<PropertyModel> Properties { get; set; }
}
public class PropertyModel
{
    public string Value { get; set; }
    public string Source { get; set; }
    // etc.
}

您可以使用System.Net.Http.Formatting命名空间中的FormDataCollection

public class ApiFormsController : ApiController
{
    [HttpPost]
    public IHttpActionResult PostForm(FormDataCollection form)
    {
        NameValueCollection items = form.ReadAsNameValueCollection();
        foreach (string key in items.AllKeys)
        {
            string name = key;
            string val = items[key];
        }
        return Ok();
    }
}

值的数量是完全随机的吗?还是有一些规则必须遵守?例如:有6个文本框,都有固定的名称和类型,但请求可以发送其中的2个,或者全部6个?完全随机。我想在控制器中的POST操作中捕获提交的表单数据(例如Val1、Val2、Val5)。
public class ApiFormsController : ApiController
{
    [HttpPost]
    public IHttpActionResult PostForm(FormDataCollection form)
    {
        NameValueCollection items = form.ReadAsNameValueCollection();
        foreach (string key in items.AllKeys)
        {
            string name = key;
            string val = items[key];
        }
        return Ok();
    }
}