Запрос API GET возвращает HTML / текст вместо JSON - PullRequest
1 голос
/ 02 июля 2019

Я впервые работаю с RESTful API, Xamarin и т. Д. До сих пор я создал простой REST API.Я написал ему вызов GET, что, если я напишу http://localhost:[num]/api/Name,, он вернет JSON-файл соответствующей информации Emu.Я проверил это с Почтальоном, поэтому я знаю, что это работает.

Я сейчас написал приложение, которое будет вызывать этот API, чтобы перехватить эту информацию и затем отобразить ее.До сих пор я подключил его к серверу, на котором размещен мой API, но я не могу заставить его вернуть JSON.Вместо этого он, похоже, возвращает текст / HTTP.

Из того, что я искал в предыдущих потоках переполнения стека, кажется, что мне не хватало заголовков, запрашивающих этот ответ в формате JSON.Когда я добавил код, который был в официальной документации .NET на веб-сайте Microsoft, у меня возникли проблемы с моим Json Deserialiser.Я также добавил информацию в заголовок, чтобы убедиться, что она возвращает json.

Вот код функции:

async private void Submit_OnClicked(object sender, EventArgs e)
        {
            var nameValue = EmuName.Text;

            var baseAddr = new Uri("http://my_url/HelloEmu/");
            var client = new HttpClient { BaseAddress = baseAddr };
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            string url = (string)nameValue;
            var returnedJson = await client.GetStringAsync(url);

            Models.EmuItemModel MyEmu = JsonConvert.DeserializeObject<Models.EmuItemModel>(returnedJson);


            ReturnedName.Text = MyEmu.Name;
            ReturnedAge.Text = MyEmu.Age.ToString();
            ReturnedWeight.Text = MyEmu.Weight.ToString();

Мой код фактически не работает в строке ReturnedWeight.Text = MyEmu.Weight.ToString() Но я предполагаю, что более серьезная проблема возникает при десериализации объекта, потому что он, по-видимому, «пропускает» предыдущие две строки, когда я запускаю его в отладчике.

Когда я запускаю его в Visual Studio 2019значение «returnJson» таково:

"<html><head><meta http-equiv=\"refresh\" content=\"0;url=http://lookup.t-mobile.com/search/?q=http://my_url/HelloEmu/Keith&t=0\"/></head><body><script>window.location=\"http://lookup.t-mobile.com/search/?q=\"+escape(window.location)+\"&r=\"+escape(document.referrer)+\"&t=0\";</script></body></html>" 

Я думаю это вывод HTML.Я хотел бы получить любые намеки о том, что, черт возьми, я делаю неправильно!

РЕДАКТИРОВАТЬ: Поскольку почти похоже, что HTML возвращает сообщение об ошибке, возможно, это может быть связано с моим URL-адресом ???Я опубликовал сайт, используя метод файловой системы.Поэтому для доступа к API в Postman я буду использовать http://localhost:[port]/api/values,, вызов моего сайта в обычном старом браузере заставляет его работать http://my_url/HelloEmu. В ответ я получаю 403 метод "без каталога" ...

РЕДАКТИРОВАТЬ: Вот код почтальона: введите описание изображения здесь

1 Ответ

0 голосов
/ 02 июля 2019

Обычно это происходит потому, что отсутствуют заголовки или какой-то другой некорректный запрос, Downlan RestSharp DLL из NuGet, и затем вы можете использовать следующее, в почтальоне, перейти к «Код»:

enter image description here

И выберите C #, вы увидите фрагмент кода (Пример):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...