2016-02-05 146 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