從我的MVC應用程序的API,我試圖做一個POST請求,在API控制器命名這些樣本終點(行動)MembershipController
:一個簡單的POST請求的Web API不打在所有
[HttpPost]
public string GetFoo([FromBody]string foo)
{
return string.Concat("This is foo: ", foo);
}
[HttpPost]
public string GetBar([FromBody]int bar)
{
return string.Concat("This is bar: ", bar.ToString());
}
[HttpPost]
public IUser CreateNew([FromBody]NewUserAccountInfo newUserAccountInfo)
{
return new User();
}
這裏的客戶端代碼:
var num = new WebAPIClient().PostAsXmlAsync<int, string>("api/membership/GetBar", 4).Result;
下面是我的WebAPIClient
類的代碼:
public class WebAPIClient
{
private string _baseUri = null;
public WebAPIClient()
{
// TO DO: Make this configurable
_baseUri = "http://localhost:54488/";
}
public async Task<R> PostAsXmlAsync<T, R>(string uri, T value)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
var requestUri = new Uri(client.BaseAddress, uri);
var response = await client.PostAsXmlAsync<T>(requestUri, value);
response.EnsureSuccessStatusCode();
var taskOfR = await response.Content.ReadAsAsync<R>();
return taskOfR;
}
}
}
我已經爲Web API定義了以下默認路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
UPDATE 我的代碼中斷到調試,直到時間的System.Net.HttpClient
代碼PostAsXmlAsync
方法被調用。但是,沒有請求出現在提琴手。但是,如果我嘗試在Fiddler中編寫POST請求或試圖通過瀏覽器觸發GET請求到其中一個API端點,則通過Fiddler組成的POST請求會告訴我,我不會發送任何數據我必須。發送GET請求的瀏覽器正確告訴我該操作不支持GET請求。
這似乎是System.Net.HttpClient
類沒有正確發送POST請求。
你可以顯示你的POST請求不工作嗎? – djikay
默認情況下,Fiddler不會捕獲localhost通信,你必須做一些事情來捕獲這個通信:http: //docs.telerik.com/fiddler/Configure-Fiddler/Tasks/MonitorLocalTraffic – JotaBe
You ca n使用Postman,DHC或Advanced REST客戶端等擴展程序來測試您的Web API。嘗試其中的任何一種,它們都非常有幫助,並且使用Fiddler提出請求更容易一些。 (我更喜歡Postman:https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en)。 – JotaBe