Использование Xamarin Studio, создание приложения Xamarin.Android с использованием API-интерфейса Azure Mobile Service + .NET Backend (WebApi 2). Я знаю, что моя мобильная служба работает, потому что я вижу, что мое приложение попадает в нее в журналы. Вот подпись моего пользовательского API:InvokeApiAsync возвращает 415 на StringContent (Monodroid/Xamarin.Android)
[HttpPost]
[Route("postplant")]
public HttpResponseMessage PostPlant([FromBody] string imageInBase64)
Я пытаюсь вызвать это с помощью InvokeApiAsync, попробовали несколько перегруженные, но я пытаюсь идти с Raw Http one. Моя строка - это jpg, который был преобразован в базу 64; если я ввешу строку непосредственно на сайт для тестирования мобильных сервисов, она работает нормально.
Моя проблема в том, что я получаю 415 неподдерживаемых сущностей типа носителя (текст/обычная).
Message = 'UserMessage =' Тип носителя просьбе лица 'текст/обычный' является не поддерживается для этого ресурса. '', Status = 415 (UnsupportedMediaType), Exception = System.Web.Http.HttpResponseException : Обработка HTTP-запроса привела к исключению.
Вот мой вызов в Xamarin:
HttpContent content = new StringContent(imageInBase64, System.Text.Encoding.UTF8);
HttpResponseMessage resp = await _service.InvokeApiAsync(@"jv/postplant", content, HttpMethod.Post, null, null);
Я также попытался следующие версии (и комбинацию из следующих), определяющих тип содержимого как приложения/JSON в явном виде; они попали в API OK, но входной параметр приходит через утратившим, поэтому метод не может:
HttpContent content = new StringContent(imageInBase64, System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage resp = await _service.InvokeApiAsync(@"jv/postplant", content, HttpMethod.Post, null, null);
и
HttpContent content = new StringContent(imageInBase64, System.Text.Encoding.UTF8);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage resp = await _service.InvokeApiAsync(@"jv/postplant", content, HttpMethod.Post, null, null);
и
HttpContent content = new StringContent(imageInBase64, System.Text.Encoding.UTF8);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
Dictionary<string, string> reqHeaders = new Dictionary<string, string>();
reqHeaders.Add("ContentType", "application/json; charset=UTF-8");
HttpResponseMessage resp = await _service.InvokeApiAsync(@"jv/postplant", content, HttpMethod.Post, reqHeaders, null);
Я также попытался переключения (например, «imageInBase64» = «xxxxlotofcharactersinbase64»}), но ничего не работает. Что мне не хватает?
Что делает 'InvokeApi'? – Cheesebaron
@ Cheesebaron вот документация из MSDN: [http://bit.ly/1UCn6LK](http://bit.ly/1UCn6LK) Он вызывает API от вашей Azure Mobile Service; в моем примере выше _service - это экземпляр [MobileServiceClient] (https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx) – codeMonkey
Вы можете попробовать проверить трафик с помощью Fiddler, чтобы увидеть что отправляется, чтобы проверить, где это происходит. – Cheesebaron