将值发布到webapi控制器

时间:2016-04-28 17:15:27

标签: c# asp.net asp.net-web-api2

这是我的WebAPi控制器和html表单。通过myValue将请求正确路由到控制器中的方法始终为null。我认为这是从一些教程中发布它的有效方法。

控制器:

[Route("add")]
public string Post([FromBody]string  myValue)
{
    return string.Format("HAIAA: [{0}]" , myValue);
}

查看:

<form id="formOne" method="post" action="ninja/add">
    <input type="text" name="myValue" /> 
    <input type="submit" value="submit" />
</form>

4 个答案:

答案 0 :(得分:4)

您无法使用HTML表单将简单类型参数发布到Web API操作。使用包含参数的复杂类型:

public class MyFormData {
    public string myValue { get; set; }
}

更改您的控制器签名:

[Route("add")]
public string Post([FromBody]MyFormData data)
{
    return string.Format("HAIAA: [{0}]" , data.myValue);
}

或者使用AJAX将单个值张贴到您的操作:

$('#formOne').submit(function () {
    $.post('ninja/add', { "": $('input[name=myValue]').val() })
        .success(function () {
            //do something
        })
        .error(function () {
            //show error
        });
    return false;
});

答案 1 :(得分:1)

使用帖子参数有一些警告。

这是我找到的最好的资源:

http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

最有可能:

// POST api/values
public string Post([FromBody]string value) {
  return value;
}

这很古怪:

您需要发送的值需要

{ '': value }

这是jquery

$.post('ninja/add', { '': value });

不完全确定如何在你的例子中修复它........但我认为我给你正确的值来尝试发送。

答案 2 :(得分:1)

我曾经遇到过同样的问题,并且我使用System.Net.Http.Formatting.FormDataCollection,它将一个对象代表发送的数据application-x-www-form-urlencoded

尝试

public string Post(System.Net.Http>formatting.FormDataCollection data)
{
    return string.Format("HAIAA: [{0}]" , data.Get("myValue"));
}

答案 3 :(得分:1)

您可以尝试这种方式。

[Route("add")]
        public string Post(System.Net.Http.Formatting.FormDataCollection myValue)
        {
            NameValueCollection nvc = form.ReadAsNameValueCollection();
            string value = nvc.Get("myValue");
            return string.Format("HAIAA: [{0}]", value);
        }