0
我有嘗試將數據發佈到Web API一個Xamarin.Forms應用。 (Web API 2 & MVC)。HttpClient.PostAsync總是返回404
我遇到的問題是,我的HttpResponse總是返回404 - 甚至當我知道這個應用程序可以contect到服務器。 (獲取數據是罰款,不得發佈。)
的Xamarin代碼:(客戶端 - 忽略返回類型的方法,我已經刪除了大量的業務邏輯!)
//Method that passes the route and param to getChartData()
private BarChartModel getChartData()
{
string postData = JsonConvert.SerializeObject (this);
string chartData = FRAPI.GetDataWithData ("BARCHART/GETBARCHART/", postData);
return JsonConvert.DeserializeObject<BarChartModel> (chartData);
}
//method that connects to the web api.
public static string GetDataWithData (string route, string data)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri (APIRoot);
var content = new StringContent (data, System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync (route, content).Result;
if (response.IsSuccessStatusCode)
{
response.EnsureSuccessStatusCode();
}
else {//blah}
}
}
API - 服務器端代碼:
[HttpPost]
[Route("api/BarChart/GetBarChart/{data}")]
public HttpResponseMessage GetBarChart(string data)
{
try
{
BarChart barChart = JsonConvert.DeserializeObject<BarChart>(data, GlobalSettings.JsonSettings);
return Request.CreateResponse(HttpStatusCode.OK, "true");
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
}
}
路由配置:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
值得一提的是,我已經嘗試了多種服務器端代碼的變體,包括:
- 刪除路由中的
{data}
部分。 (下面發佈的教程具有類似的路線,並且不包括的路由。) - 包含在方法簽名
[FromBody]
標籤。
從我所看到的,我的代碼實際上並沒有從resgisterUser
代碼不同(除了對象名稱)在此tutorial.
預先感謝您!
你有'APIRoot'設置是否正確?你有沒有嘗試把完整的URL放在代碼中而不是構造它? – mydogisbox
你的Xamarin應用試圖打哪個網址?你有沒有試過通過'Fiddler'來打電話? – Jonesopolis
'APIRoot'也用於檢索數據,完美的工作! – KidCode