У меня есть приложение Xamarin.Forms, которое пытается отправить данные в веб-API. (Web API 2 & MVC).HttpClient.PostAsync всегда возвращает 404
Проблема, с которой я столкнулась, заключается в том, что мой HttpResponse всегда возвращает 404 - даже когда я знаю, что приложение может контактировать с сервером. (Получение данных в порядке, проводка не является.)
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 - Server Side Код:
[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
Какой URL-адрес вашего приложения Xamarin пытается ударить? Вы пробовали посмотреть вызов через 'Fiddler'? – Jonesopolis
'APIRoot' также используется для поиска данных, который отлично работает! – KidCode