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