2015-05-04 23 views
1

我很抱歉,如果這個問題看起來微不足道,但對WebAPI來說是新的,我不能 獲得客戶端訪問Put方法。
這裏是我的WebAPI方法通過Put請求在WebAPI中訪問方法

public class TestController : ApiController 
{ 
    [HttpPut] 
    public HttpResponseMessage Put(string id) 
    {   
     var response = new HttpResponseMessage(); 
     response.Headers.Add("Message","Success"); 
     return response; 
    }  
} 

路由配置

//configure the webapi so that it can self host 
var config = new HttpConfiguration(); 
config.MapHttpAttributeRoutes(); 
config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "{Controller}/{action}/{id}", 
     defaults: new {id = RouteParameter.Optional } 
); 

客戶

var baseAddress="http://localhost:8000/"; 
var client= new HttpClient {BaseAddress = new Uri(baseAddress)}; 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
HttpResponseMessage response = client.PutAsJsonAsync(baseAddress+"Test", "TestParam").Result; 
Console.WriteLine(response.Content); 

當我運行上面的代碼。 我得到404錯誤出於某種原因,意味着客戶端無法聯繫webapi方法。

我有三個問題。
1.如何確保客戶端可以正確調用Web API方法。
2.是否可以直接從url調用該方法? 我試過http://localhost:8000/test/Dummy但沒有運氣。
3.如果可以調用該方法,我如何確保該消息顯示在頁面上顯示「成功」。

回答

1

如果您未在配置的路由中指定操作,則您的代碼可以正常工作。在這種情況下,該操作由HTTP方法(PUT,POST,DELETE,GET ...)選擇。路線shpukd是這樣的:

routes.MapHttpRoute(
    name: "API Default", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

正如您所指定的路線{action}一部分,則必須在URL中指定的動作。在這種情況下,url應該是這樣的:

http://localhost:8000/Test/Put 

請參閱Routing in ASP.NET Web API

如果您想測試您的Web API方法,可用的最佳工具之一是Postman,這是一個Chrome擴展。這解決了您的問題1 & 2.

對於Q3:當您撥打asycn電話時,您必須await作爲響應消息,閱讀並顯示相應消息。如果您不知道異步/等待模型,則可以使用read this documentation

+0

嗨JotaBe感謝您的評論。是的,我確實使用了基於您建議的路由的代碼。即使使用http:// localhost:8000/Test/Put也不行。這應該是http:// localhost:8000/Test/IdName我通過文檔閱讀了這篇文檔,但文檔沒有足夠的解釋放置請求。 – Sike12

+0

如果您在我的答案中使用路線,則可以使用以Put開頭的任何操作名稱。該文檔解釋了這一點:*此慣例僅適用於GET,POST,PUT和DELETE方法*。如果它不適合你,那肯定是另外一個問題。請安裝並使用郵遞員創建執行PUT請求,並讓我知道答案是什麼。像GET或POST等其他方法可以爲你工作嗎? – JotaBe

+0

是的JotaBe。它的工作現在。非常感謝您的幫助 :) – Sike12