CURL中的POST参数

时间:2012-08-07 03:46:51

标签: post curl asp.net-web-api

我正在尝试使用CURL将简单的POST参数(int)发送到ASP.NET web api控制器POST方法,如下所示:

curl -d "id=1" --ntlm --user <user>:<pass> http://dev.test.local/api/test


这是将数据附加到用于Curl的POST的正确方法吗?我可以很好地联系网址,但似乎参数&#39; id&#39;没有通过,因为我从服务器返回以下错误:

"The parameters dictionary contains a null entry for parameter 'id' of non-nulla
ble type 'System.Int32' for method 'System.String Post(Int32)' in 'Test.Si
te.Controllers.TestController'. An optional parameter must be a reference type,
a nullable type, or be declared as an optional parameter."


我在OrderController中的POST方法如下:

    // POST api/test
    public string Post(int id)
    {
        return "Post successful";
    }

任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:1)

问题是,intstring等简单类型不能与来自邮件正文的数据进行模型绑定,除非您明确说明如下:

public string Post([FromBody]int id)
{
    return "Post successful";
}

另一个解决方案是您可以从RouteData或查询字符串中询问这些类型的值。

答案 1 :(得分:1)

我个人会使用简单的DTO并通过JSON调用。

路线:

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}",
            defaults: new {   }
        );

控制器&amp; DTO:

[DataContract]
public class valueDto
{
    [DataMember]
    public int id { get; set; }
}

public class TestController : ApiController
{
    // POST api/values
    public string Post(valueDto value)
    {
        return string.Format("Post successful {0}", value.id);
    }
}

使用curl调用:

curl -d "{ "id": 1 }" --ntlm --user <user>:<pass> http://dev.test.local/api/test -H "Content-Type:application/json"

但是

只需从tugberk的回答中稍微了解一下,然后引用另一个answerhere

当您使用FromBody属性时,您还需要将“Content-Type”作为Content-Type发送:application / x-www-form-urlencoded。您还需要更改不具有“id = 1”的呼叫,而是使用“= 1”,例如

curl -d "=1" --ntlm --user <user>:<pass> http://dev.test.local/api/test -H "Content-Type:application/x-www-form-urlencoded"