Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
1

Не удается получить данные с сервиса погоды

09.08.2017, 12:59. Просмотров 2022. Ответов 4
Метки нет (Все метки)


Добрый день. Есть небольшое приложение ASP.NET MVC, где есть : модель ,в которой реализованы классы для считывания данных с сайта OpenWeatherMap.org,вот пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 {
 
        public static async Task<RootObject> GetWeather(string city)
        {
            var http = new HttpClient();
            var response = await http.GetAsync($"http://api.openweathermap.org/data/2.5/weather?q={city}&appid=37766c27205f21f7f3115c2727d3e4c1");
            var result = await response.Content.ReadAsStringAsync();
            var serializer = new DataContractJsonSerializer(typeof(RootObject));
 
            var memory_stream = new MemoryStream(Encoding.UTF8.GetBytes(result));
            var data = (RootObject)serializer.ReadObject(memory_stream);
            return data;
        }
    }
 [DataContract]
    public class RootObject
    {
        [DataMember]
        public Coord coord { get; set; }
        [DataMember]
        public List<Weather> weather { get; set; }
        [DataMember]
        public string @base { get; set; }
        [DataMember]
        public Main main { get; set; }
        [DataMember]
        public int visibility { get; set; }
        [DataMember]
        public Wind wind { get; set; }
        [DataMember]
        public Clouds clouds { get; set; }
        [DataMember]
        public int dt { get; set; }
        [DataMember]
        public Sys sys { get; set; }
        [DataMember]
        public int id { get; set; }
        [DataMember]
        public string name { get; set; }
        [DataMember]
        public int cod { get; set; }
    }

Так же есть вьюшка ,откуда я получаю название города
C#
1
2
3
4
5
6
7
<h2>Enter the name of the city</h2>
        @using (Html.BeginForm("Click", "Home", FormMethod.Get))
        { 
           
            <input type="text" name="city" />
            <input type="submit" value="GetWeather" />
        }

и простой контрол ,где есть метод Click
C#
1
2
3
4
5
6
7
8
 [HttpGet]
        public async Task<ActionResult> Click(string city)
        {
            //string city = (string)Request.Form["name"];
            RootObject weather = await WeatherUndegroundProxy.GetWeather(city);
            ViewBag.Text = weather.wind + " - ";
            return View();
        }

Когда я пытаю получить погоду по любому городу, вместо нужных данных выводится вот это WeatherForecast.Models.Wind .
То есть, с сайта погода не считывается.
Помогите пожалуйста, уже не один час ломаю голову.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.08.2017, 12:59
Ответы с готовыми решениями:

Получить данные с сайта с прогнозом погоды. Ошибка ERR_INSECURE_RESPONSE.
Всем привет. Помогите, пожалуйста, просмотрел уже кучу инфы по данной проблеме, но не получается...

Получить данные о скорости ветра с сайта с прогнозом погоды windy.com
Добрый день. Есть сайт с прогнозом погоды windy.com. У данного сайта есть API, которые...

Как получить данные от wcf сервиса через SOAP
Имеется wcf service. Необходимо вызвать его метод и получить данные. Возможно ли это сделать через...

Не удается получить данные из формы
Код html с формой: &lt;!DOCTYPE html&gt; &lt;html &gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot;...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
4
Администратор
Эксперт .NET
13128 / 10695 / 4413
Регистрация: 17.03.2014
Сообщений: 21,533
Записей в блоге: 1
09.08.2017, 13:28 2
Лучший ответ Сообщение было отмечено qrbio как решение

Решение

qrbio, то есть ты не в курсе что реализация по умолчанию метода ToString() возвращает полное имя типа? Это базовое поведение и оно одинаковое для любых .NET приложений. Скорее всего тебе нужно выводить конкретные свойства из класса Wind.
0
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
09.08.2017, 13:46  [ТС] 3
Блин, точно. Условия вывести получилось, но только для городов Киев и Москва.
С чем это может быть связано? Вот здесь вообще не могу понять

Добавлено через 1 минуту
Вот такая ошибка :
Значение было недопустимо малым или недопустимо большим для Int32.
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

Сведения об исключении: System.OverflowException: Значение было недопустимо малым или недопустимо большим для Int32.

Ошибка источника:


Строка 25:
Строка 26: var memory_stream = new MemoryStream(Encoding.UTF8.GetBytes(result));
Строка 27: var data = (RootObject)serializer.ReadObject(memory_stream);
Строка 28: return data;
Строка 29: }

Добавлено через 1 минуту
Хотя просто запрос в адресной строке на получение данных json работает. Вот , например, для франции
http://api.openweathermap.org/... 2727d3e4c1
0
Администратор
Эксперт .NET
13128 / 10695 / 4413
Регистрация: 17.03.2014
Сообщений: 21,533
Записей в блоге: 1
09.08.2017, 13:52 4
qrbio, раз исключение происходит при десереализации, то значит свойство имеет тип int, а значение из JSON в него не влезает. Какое именно тебе должно быть виднее.
0
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
09.08.2017, 17:45  [ТС] 5
не совсем понимаю, откуда оно берет int32.
Вот например, хочу вывести температуру:
ViewBag.Text = weather.main.temp.ToString() ;

temp - типа double.
Вот еще по поводу исключения :
[XmlException: Значение "5.1" не может интерпретироваться как тип "Int32".]
.................
[SerializationException: Ошибка десериализации объекта типа WeatherForecast.Models.RootObject. Значение "5.1" не может интерпретироваться как тип "Int32".]

Почему интерпретируется как int32?

Добавлено через 8 минут
Все, проблема решилась. В RootObject привела почти все поля к double. Не сообразила, что даже если не выводишь какое-то поле, все-равно будет происходить сериализация всего объекта RootObject.
Спасибо ,что уделили внимание посту.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2017, 17:45

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Не удается получить данные из <div>
Господа,есть вопрос. необходимо получить содержимое блока &lt;div&gt;, а точнее текст,без тегов(в...

CKEDITOR: не удается получить данные из формы
Всем привет! кто нибудь работал с редактором ckeditor? У меня такая проблемка, не получаеться...

Скрипт рейтинга - не удается получить данные из БД
здравствуйте не могу разобраться с кодом скрипт рейтинга, пытался весь день решить проблему сам....

Qt Mac OS, не удаётся получить данные в SQLite
Здравствуйте, уважаемые формучане, у меня такая проблема: Подключился к БД, написал запрос для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.