2016-02-05 99 views
1

我有两个项目的解决方案,一个是我的webapi服务,另一个是我的项目mvc。我正在从我的控制器呼叫该服务。我的服务有GET,POST,PUT所有方法。在我看来,我正在使用提交按钮,并调用后控制器方法,后者又调用我的服务。这里我面临的问题是总是调用GET方法。我想火POST方法在我的服务如何使web API Post方法调用

控制器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方法。

回答

-1

这是你如何做一些data.It的类似GET请求,但在这种情况下,因为你想要一个POST发送POST这将是适用的。另外注意它的简单添加POST数据(当与HttpWebRequest比较时)

httpClient.PostAsync(uri, new StringContent(data)); 
+0

我想大卫说我需要序列化它。我的案例测试是一个obeject而不是一个字符串。如果我使用strigncontent,我会得到无效的参数异常 – jubi

+0

httpClient.PostAsync(uri,Object); – jackotonye

3

好吧,看在方法你使用:

httpClient.GetStringAsync(uri); 

Get不正是顾名思义。它向资源发出GET请求。如果您想使用不同的HTTP动词,请使用other methods available之一。

例如:

httpClient.PostAsync(uri, someContentObject); 

或者,使用HttpClientExtensions

httpClient.PostAsJsonAsync(uri, test); 
+0

感谢您显示错误。你可以告诉我什么是ContentContent。它是否是对象(在我的情况下是测试)? – jubi

+0

@jubi:这是一个'HttpContent'对象,可以认为它是一种通用容器,用于发送任何有效负载。例如,你可能会JSON序列化你的对象,并从它创建一个'StringContent'来在这里使用。 – David

+0

谢谢。我应该谷歌,看看我可以如何Json序列化我的对象。我会试着让它知道它是否有效 – jubi