2015-04-18 163 views
1

在學習關於Web API的過程中,我創建了(或實際上Visual Studio有)一個簡單的控制器。我也創建了一個WPF程序,可以從Web API的GET()部分讀取,但我無法訪問其他人。從控制檯應用程序訪問Web API

我試了很多,發現很多博客和網頁說:「就這樣做......」但沒有任何工作。我究竟做錯了什麼?

MVC部分:

namespace MVCWebservice.Controllers 
{ 
    public class LaLaController : ApiController 
    { 
     // GET: api/LaLa 
     public string Get() 
     { 
      return "Hello from API"; 
     } 

     // GET: api/LaLa/5 
     public string Get(int id) 
     { 
      return "value"; 
     } 

     // POST: api/LaLa 
     public void Post([FromBody]string value) 
     { 
      var a = value; 
     } 

     // PUT: api/LaLa/5 
     public void Put(int id, [FromBody]string value) 
     { 
      var b = value; 
      int c = id; 
     } 

     // DELETE: api/LaLa/5 
     public void Delete(int id) 
     { 
      int c = id; 
     } 
    } 
} 

而且從我的控制檯應用程序實際工作的方法:

private static async Task ReadFromWebApi() 
{ 
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(); 
    client.BaseAddress = new Uri("http://localhost:26176/"); 
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
    var resp2 = await client.GetAsync("api/LaLa/"); 
    resp2.EnsureSuccessStatusCode(); 
    var aaa = resp2.Content; 
    string result = await aaa.ReadAsStringAsync(); 
    Console.WriteLine(result); 
} 

剛剛停止的方法:

如果我刪除EnsureSuccessStatusCode我會拿回以下內容:

SS = 「{\」 消息\ 「:\」 的請求的資源不支持HTTP 法 '把' \。 「}」

private static async Task SendToWebApi() 
{ 
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(); 
    client.BaseAddress = new Uri("http://localhost:26176/"); 
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
    Console.WriteLine("-1-"); 
    var resp2 = client.PutAsync("api/LaLa/", new System.Net.Http.StringContent("Hey", Encoding.UTF8, "application/json")).Result; 
    Console.WriteLine("-2-"); 
    resp2.EnsureSuccessStatusCode(); 
    var ss = await resp2.Content.ReadAsStringAsync(); 
} 

我怎麼會寫其他的方法我的訪問?

+0

這是否有幫助? http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client –

回答

1

一件事,你在URL中api/LaLa/調用PUT,但服務器的方法簽名

public void Put(int id, [FromBody]string value) 

看來該URL應該包括一個數字ID,以滿足第一個參數,例如api/LaLa/100或類似的。也許你可以修改你的客戶打電話PutAsync()這樣的:

var resp2 = client.PutAsync("api/LaLa/100", new System.Net.Http.StringContent("Hey", Encoding.UTF8, "application/json")).Result; 

不崗位工作?看看this answer的問題,看起來非常像你的問題,看看你是否可以得到這個工作。

+0

謝謝。我以爲我曾嘗試過。現在我得到了100的ID,但我的價值是空的,我期待它是:「嘿」 你也有這個想法嗎? –

+0

嘗試用一些有效的json替換「Hey」。也許「{\」value \「:\」嗨\「}」 –

相關問題