web api post方法的空参数

时间:2015-06-16 20:59:39

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

我有一个非常简单的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始终为空。

我做错了什么?

感谢。

4 个答案:

答案 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上工作。

enter image description here

答案 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。

举个例子,

  • 传入的json:
  •   -

{
    "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!
  ...
}