2016-03-02 40 views
1

我正在學習使用客戶端創建RESTful API,但是我正在努力將用戶輸入傳遞給該帖子。我的控制器是好的,因爲我可以發送數據到數據庫(用Swagger測試),但在客戶端,調試器給我一個PostAsJsonAsync錯誤。我認爲這可能與路由有關。下面是我的客戶我郵編:將參數傳遞給C#Http客戶端post

static async Task AddAsync(ForumPost fp) 
{ 
    try 
    { 
     using (HttpClient client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:7656/"); 

      client.DefaultRequestHeaders.Accept 
         .Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      // HTTP POST 
      ForumPost thePost = new ForumPost() { 
            Subject = fp.Subject, 
            Message = fp.Message}; 
      HttpResponseMessage response = await client.PostAsJsonAsync("post", thePost); 
      if (response.IsSuccessStatusCode) 
      { 
       Uri uri = response.Headers.Location; 
       Console.WriteLine("URI for new resource: " + uri.ToString()); 
      } 
      else 
      { 
       Console.WriteLine(response.StatusCode + " " + response.ReasonPhrase); 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.ToString()); 
     Console.ReadLine(); 
    } 
} 

和控制器

[HttpPost] 
// POST: api/Forum 
[Route("post")] 
public void PostNewMessage (string subject, string message) 
{ 
    if (ModelState.IsValid) 
    { 
     ForumPost p = new ForumPost(subject, message); 
     db.ForumPosts.Add(p); 
     db.SaveChanges(); 
    } 
} 

我身邊有各種不同但類似的問題在這裏看着左右,但努力理解的相關位。我曾嘗試在路線中放置佔位符,但也許我錯誤地實現了它? (如果那是甚至是正確思考的方式!)如果有人能幫助我解決這個問題,我將不勝感激。

回答

1

當您的Web API操作參數是字符串等簡單類型時,parameter binding機制假定它們來自查詢字符串。可以推斷,該值應該來自請求主體,只需使用你的ForumPost類直接爲您的參數,而不是單獨的字符串值:

[HttpPost] 
// POST: api/Forum 
[Route("post")] 
public void PostNewMessage(ForumPost p) 
{ 
    if (ModelState.IsValid) 
    { 
     db.ForumPosts.Add(p); 
     db.SaveChanges(); 
    } 
} 

還要注意的是ForumPost需要一個無參數的構造函數,以便知道框架如何創建一個實例。定義它是這樣的,你應該很好:

public class ForumPost 
{ 
    public string Subject { get; set; } 
    public string Message { get; set; } 
} 
+0

嗨託德,感謝您的答覆。我試圖實現你所說的,但無濟於事。無論如何,我不確定這是(最大的!)問題。即使當我在客戶端硬編碼一個新帖子,並將其傳遞給PostAsJsonAsync時,我收到錯誤。它是一個套接字錯誤異常:「System.Net.Http.HttpRequestException:發送請求時發生錯誤---> System.Net.WebException:無法連接到遠程服務器---> System.Net.Sockets .SocketException:由於目標計算機主動拒絕它,因此無法建立連接127.0.0.1:23226\r\n...etc – Inkers

+0

這是一個網絡問題,如果你google了那個異常消息,你會發現沒有結果短缺,比如例如,[this one](http://stackoverflow.com/questions/9695224/no-connection-could-be-made-because-the-target-machine-actively-refused-it-127-0)雖然我我相信我的建議修復也需要得到這個工作。 –

+0

再次感謝託德,簡單的錯字在最後 - 錯誤的端口號。是的,我現在已經實施了你的建議,我的文章現在正在工作。 – Inkers

相關問題