2016-11-25 4 views
1
var url = "http://domain.herokuapp.com/api/createuser"; 
var item = new { username = "kasunrt1", email = "[email protected]", password = "3333", tele = "123456789" }; 
var uri = new Uri(url); 
var json = JsonConvert.SerializeObject(item); 
var content = new StringContent(json, Encoding.UTF8, "application/json"); 
var client = new HttpClient(); 
var result = await client.PostAsync(url, content); 

Служба вверх & работает. Он работает в браузере & почтальона, когда я вручную выполняю строку API, как показано ниже.HttpClient PostAsync неудачу на Xamarin.Forms (StatusCode: 404)

http://domain.herokuapp.com/api/createuser/nameTest/[email protected]/346gf4/123456789

Даже ниже код работает.

var result = await client.PostAsync("http://domain.herokuapp.com/api/createuser/nameTest/[email protected]/346gf4/123456789", null); 

В результате получается 404 {StatusCode: 404, ReasonPhrase: 'Not Found', версия: 1.1, Содержание: System.Net.Http.StreamContent, заголовки: { сервер: Ковбой соединения: держать-живой X-Powered-By: Экспресс X-Content-Type-Options: nosniff Дата: пт, 25 ноября 2016 г. 6:27:06 GMT Via: 1,1 vegur Content-Type: текст/HTML; кодировка = UTF-8 Content-Length: 28 }}

Heroku получает только следующий запрос.2016-11-25T06: 31: 27.827923 + 00: 00 heroku [router]: at = info method = POST path = "/ api/createuser" host = domain.herokuapp.com request_id = 1cb51340-05a5-4503- acb5-9e3b45cdf393 FWD = "61.245.163.5" Dyno = web.1 подключения = 1 мс сервис = 71ms статус = 404 байт = 226

Я не могу найти то, что здесь не так. Любая помощь будет высоко оценен. Спасибо!

+0

Невозможно воспроизвести. Я получаю результат ОК с кодом, который вы указали в вопросе –

ответ

1

Существует два способа отправки данных в API/URL. Либо через url-параметр, либо с POST-параметром. Ваш url, который вы отправляете с Postman, отправляет парметер через параметр url (whats the difference?).

С другой стороны, вы отправляете параметр через POST-параметр с помощью метода PostAsyncHttpClient. Эти значения отправляются в тело запроса в том формате, который указан в типе содержимого.

HttpClient затем пытается достичь URL http://domain.herokuapp.com/api/createuser (withtout параметров в конце), и этот URL не существует, поэтому вы получите 404-й ошибки.

Вариант 1: Изменение API-метод, что значения передаются через POST

Вариант 2: Измените запрос, чтобы установить свои значения в url переменной

Вариант 1 является предпочитали и правильный путь это нужно. Потому что вы POST что-то для своего api. Ваши ценности должны быть в теле запроса, а не непосредственно в URL-адресе. Поэтому измените свой API и ваш код должен работать

+0

Да. Вариант 1 работал. Спасибо за кучу за хорошее объяснение и ответ! @Joehl – Heshan