2016-04-28 94 views
2

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

控制器:

[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> 
+0

检查怎么形成的正在提交数据。因为对于'[FromBody]'来说,提交值的格式必须是“输入的值”。删除'[FromBody]'属性,它应该工作 – Nkosi

回答

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

非常感谢您的确认!现在我可以把它留在我身后继续前进。 Jeeez在这上面花了很多时间。大量的文章说,虽然你可以,但显然你不能。 – Lautaro

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

不完全知道如何解决它在你的榜样........但我认为我给你正确的值来尝试发送。

+0

Im不从jQuery发布。我正在做一个正常的HTTP表单发布。 – Lautaro

+0

是的......我意识到这一点。我只是给你jquery的等价物。你需要格式化你发送给帖子的内容,这就是我要说的。 :) – granadaCoder

+0

但我可能会自己切换到jQuery。 – granadaCoder

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")); 
} 
+0

这个工程!我已经知道了。我试图找出什么是数据的形式规则。 – Lautaro

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

这太复杂了。它适用于参数(FomrDataCollection数据) 而在正文中只有数据[“myValue”]。你不需要nvc对象。 – Lautaro

+0

@Lautaro感谢您的建议,我之前尝试了这些解决方案,但不知何故,我无法获取数据。这就是为什么我尝试了上述解决方案,对我有用 – hdkhardik