我有两个项目的解决方案,一个是我的webapi服务,另一个是我的项目mvc。我从我的控制器调用该服务。我的服务有GET,POST,PUT所有方法。在我看来,我正在使用一个提交按钮,它会调用后控制器方法,后者又调用我的服务。这里我面临的问题是它总是调用GET方法。我想在我的服务中激活POST方法
控制器发布方法
[HttpPost]
public ActionResult Create(Test test)
{
if (ModelState.IsValid)
{
Test objTest = MyService.Create(test);
if (objTest == null)
{
return HttpNotFound();
}
return RedirectToAction("Index");
}
}
这里调用服务
**public Test Create(Test test)
{
string uri = baseUri + "Test/";
using (HttpClient httpClient = new HttpClient())
{
Task<HttpResponseMessage> response = httpClient.PostAsJsonAsync(uri, new StringContent(JsonConvert.SerializeObject(Test)));
return JsonConvert.DeserializeObjectAsync<Test>(response.Result.Content.ReadAsStringAsync().Result).Result;
}
}**
这是帖子
**// POST api/Test
public HttpResponseMessage PostTest(test test
{
if (ModelState.IsValid)
{
db.Test.Add(test);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, test);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = test.TestID }));
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
****************
**// GET api/Test
public IEnumerable<Test> GetTest()
{
var tests= db.Tests;
return tests.AsEnumerable();
}**
它总是调用上面的Get方法。我是web api服务的新手。有人可以用正确的方式指导我,我错了。我没有使用任何ajax来调用post方法。
答案 0 :(得分:3)
好吧,看看你正在使用的方法:
httpClient.GetStringAsync(uri);
Get
完全符合名称的含义。它向资源发出GET
请求。如果要使用其他HTTP谓词,请使用other methods available。
例如:
httpClient.PostAsync(uri, someContentObject);
或者,使用HttpClientExtensions
:
httpClient.PostAsJsonAsync(uri, test);
答案 1 :(得分:-1)
这是你用一些数据进行POST的方式。它类似于GET请求,但在这种情况下,因为你想发送一个POST,这将是适用的。还要注意添加POST数据的简单方法(与HttpWebRequest相比)
httpClient.PostAsync(uri, new StringContent(data));