CURL中的POST参数
我试图使用CURL向ASP.NET web api控制器POST方法发送一个简单的POST参数(int),如下所示:CURL中的POST参数,post,curl,asp.net-web-api,Post,Curl,Asp.net Web Api,我试图使用CURL向ASP.NET web api控制器POST方法发送一个简单的POST参数(int),如下所示: curl -d "id=1" --ntlm --user <user>:<pass> http://dev.test.local/api/test 我在OrderController中的POST方法如下: // POST api/test public string Post(int id) { return "P
curl -d "id=1" --ntlm --user <user>:<pass> http://dev.test.local/api/test
我在OrderController中的POST方法如下:
// POST api/test
public string Post(int id)
{
return "Post successful";
}
非常感谢您的帮助。问题在于,诸如
int
、string
等简单类型不能与消息正文中的数据进行模型绑定,除非您明确地告诉它,如下所示:
public string Post([FromBody]int id)
{
return "Post successful";
}
另一种解决方案是,您可以从
RouteData
或查询字符串中询问这些类型的值。我个人会使用一个简单的DTO并通过JSON调用
路线:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}",
defaults: new { }
);
控制器和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"
curl-d{“id”:1}--ntlm--用户:http://dev.test.local/api/test -H“内容类型:应用程序/json”
但是
接下来是tugberk的回答,并引用了另一个和
使用FromBody属性时,还需要将“内容类型”作为内容类型发送:application/x-www-form-urlencoded。您还需要更改没有“id=1”的调用,而是使用“=1”,例如
curl-d“=1”--ntlm--用户:http://dev.test.local/api/test -H“内容类型:应用程序/x-www-form-urlencoded”
如果您想知道curl
到底发送了什么,可以运行curl--trace ascii curl.log-d id=1…
,然后查看curl.log
(这将向您显示curl
正在生成一个完全正常的POST
请求)Ok,我查看了日志,错误与上面列出的相同?@davey1990,是否有可能curl发送的数据被解释为字符串而不是整数,因此被.net以某种方式清除?考虑改变你的函数来接受一个字符串,然后让我们知道这是否有帮助。谢谢马克,这种方式是正确的。我选择创建自己的模型对象,然后自动绑定参数。这种方法也适用于简单类型,但最终我将构建复杂的数据类型。谢谢
curl -d "{ "id": 1 }" --ntlm --user <user>:<pass> http://dev.test.local/api/test -H "Content-Type:application/json"
curl -d "=1" --ntlm --user <user>:<pass> http://dev.test.local/api/test -H "Content-Type:application/x-www-form-urlencoded"