我想将数据发布到WebAPI。理想情况下我会这样做:
http:www.myawesomesite.com?foo=bar
作为POST。但对于我的具体问题,我正在尝试使用:
using(var webClient = new WebClient())
{
client.uploadString("http:www.myawesomesite.com", "POST", "foo=bar");
}
But that converts "foo=bar" to a bye array。好的,我只是想让它在这一点上起作用。
我的Web API控制器如下所示:
[HttpPost]
public void MashPotatos(string foo)
{
potatoMasher.Mash(foo);
}
但我得到The remote server returned an error: (404) Not Found.
首先,我认为WebAPI会自动为我提供数据,即使它是在请求正文中。但更重要的是,我只是希望能够让它发挥作用。
理想情况下,我希望将WebAPI方法保留为一种形式,以便您仍然可以使用带有POST动词的查询字符串来调用它。
答案 0 :(得分:1)
您需要配置您的网址API路线以接受foo参数。可能会解决您的问题
config.Routes.MapHttpRoute(name: "newont",
routeTemplate: "api/{controller}/{foo}",
defaults: new { controller = "Controllername", foo= "foo"}
);
答案 1 :(得分:0)
好here是一篇可能对某些人有帮助的帖子。对我来说,我只需要这样做:
using(var webClient = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
client.uploadString("http:www.myawesomesite.com", "POST", "foo=bar");
}
和
[HttpPost]
public void MashPotatos([FromBody]string foo)
{
potatoMasher.Mash(foo);
}
我决定不使用查询字符串进行POST,因为它似乎违反了convention,但还有[FromUri]属性
答案 2 :(得分:0)
public string GetData(){
string jsonResponse = string.Empty;using (WebClient client = new WebClient()){client.Headers[HttpRequestHeader.ContentType] = "application/json";
jsonResponse = client.UploadString(baseuri, "POST", @"{personId:""1"", startDate:""2018-05-21T14:32:00"",endDate:""2018-05-25T18:32:00""}");
return JsonConvert.DeserializeObject<Model>(jsonResponse);}}
@ “{PERSONID:” “1””, 开始日期: “” 2018-05-21T14:32:00 “”,结束日期: “” 2018-05-25T18:32:00 “”}
这是一个JSON自定义字符串,或者您可以在API端序列化该对象
<强> HttpPost 强>
public string Metod(Something data)
{
DateTimeOffset sDate = DateTimeOffset.Parse(data.date1);
DateTimeOffset eDate = DateTimeOffset.Parse(data.date2);
return _someService.GetService(data.Id, sDate, eDate);
}
然后我们转到服务并从DB获取数据