我有一个非常简单的web api控制器:
public class CarrinhoController : ApiController
{
[HttpPost]
public string Adiciona([FromBody] string conteudo)
{
return "<status>sucesso</status";
}
}
现在我正在运行服务器并尝试通过curl
测试此方法,如下所示:
curl --data "teste" http://localhost:52603/api/carrinho
请求到达我的控制器。但是,参数conteudo
始终为空。
我做错了什么?
感谢。
答案 0 :(得分:3)
这些帖子详细解释了http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/
中的类似问题在asp.net网站http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
上当参数具有[FromBody]时,Web API使用Content-Type标头选择格式化程序。在这个例子中,内容类型是&#34; application / json&#34;并且请求主体是原始JSON字符串(不是JSON对象)。
最多允许一个参数从邮件正文中读取。
添加&#34;内容类型:application / json&#34;在Fiddler上工作。
答案 1 :(得分:2)
根据您发送的Content-Type
确定ASP.NET WebAPI如何绑定参数。
尝试发送以下内容(表格编码)
conteudo=teste
或者,如果您不希望发生绑定,则删除所有参数并读取发布的数据
var myContent = response.Content.ReadAsStringAsync().Result;
答案 2 :(得分:1)
您需要在POST数据中命名参数以匹配方法参数名称。将您的parameter=value
数据参数更改为以下格式:
curl --data "conteudo=teste" http://localhost:52603/api/carrinho
例如:
$(".body").height($(window).height());
答案 3 :(得分:0)
您的请求可能不正确(格式不正确)。 WebAPI使用JSON序列化程序,忽略格式错误的请求错误,只传递null。
举个例子,
{
"MyProp":"<ASN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>"
}
public class MyRequest
{
public string MyProp { get; set; }
}
控制器操作:
[HttpPost]
[Route("inbound")]
[ResponseType(typeof(InboundDocument))]
public IHttpActionResult DoPost([FromBody]MyRequest myRequest)
{
if (myRequest == null) throw new ArgumentNullException(nameof(myRequest));//this line throws!
...
}