Форум программистов, компьютерный форум, киберфорум
Web API
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129

Не работают запросы к Web API

29.11.2022, 22:30. Показов 1563. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Первый раз пишу API. Суть в том, что есть декстоп-приложение и мобильное, нужно сделать так, чтобы они оба коннектились к одной БД SSMS и получали данные в реальном времени. API вроде как написала, теперь пытаюсь вызвать в мобилке, но висит на строке
C#
1
string result = await client.GetStringAsync(Url);
и выдает ошибку: System.OperationCanceledException: 'The operation was canceled.' Очень прошу помощи, уже не понимаю, что делать.....


Мобилка:
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
public class WorkTask
        {
            public int Id { get; set; }
            public int Id_employee { get; set; }
            public int Id_status { get; set; }
            public string NameOfTask { get; set; }
            public string DescriptionOfTask { get; set; }
            public DateTime DateTimeStart { get; set; }
            public DateTime DateTimeEnd { get; set; }
        }
 
        public class API
        {
            const string Url = "http://192.168.0.106:45457/api/workTasks/";
 
            JsonSerializerOptions options = new JsonSerializerOptions
            {
                PropertyNameCaseInsensitive = true,
            };
            private HttpClient GetClient()
            {
                HttpClient client = new HttpClient();
                client.DefaultRequestHeaders.Add("Accept", "application/json");
                return client;
            }
 
            public async Task<IEnumerable<WorkTask>> Get()
            {
                HttpClient client = GetClient();
                string result = await client.GetStringAsync(Url);
                return System.Text.Json.JsonSerializer.Deserialize<IEnumerable<WorkTask>>(result, options);
            }
        }
 
        private async void EnterButton_Clicked(object sender, EventArgs e)
        {
            API ex1 = new API();
            var d = await ex1.Get();
        }
АПИ:
ResponseWorkTasks.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ResponseWorkTasks
    {
        public ResponseWorkTasks(Entities.workTasks workTasks)
        {
            Id = workTasks.Id;
            Id_employee = workTasks.Id_employee;
            Id_status = workTasks.Id_status;
            NameOfTask = workTasks.NameOfTask;
            DescriptionOfTask = workTasks.DescriptionOfTask;
            DateTimeStart = workTasks.DateTimeStart;
            DateTimeEnd = workTasks.DateTimeEnd;
        }
 
        public int Id { get; set; }
        public int Id_employee { get; set; }
        public int Id_status { get; set; }
        public string NameOfTask { get; set; }
        public string DescriptionOfTask { get; set; }
        public DateTime DateTimeStart { get; set; }
        public DateTime DateTimeEnd { get; set; }
    }
workTasksController.cs
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public class workTasksController : ApiController
    {
        private workTasksSolutionEntities db = new workTasksSolutionEntities();
 
        // GET: api/workTasks
        [ResponseType(typeof(List<workTasks>))]
        public IHttpActionResult GetworkTasks()
        {
            return Ok(db.workTasks.ToList().ConvertAll(p => new ResponseWorkTasks(p)));
        }
 
        [Route("api/getWorkTaskOnId")]
        public IHttpActionResult GetWorkTaskOnId(int idEmp)
        {
            return Ok(db.workTasks.ToList().Where(p => p.Id_employee == idEmp).ToList().ConvertAll(p => new ResponseWorkTasks(p)));
        }
 
        // GET: api/workTasks/5
        [ResponseType(typeof(workTasks))]
        public IHttpActionResult GetworkTasks(int id)
        {
            workTasks workTasks = db.workTasks.Find(id);
            if (workTasks == null)
            {
                return NotFound();
            }
 
            return Ok(workTasks);
        }
 
        // PUT: api/workTasks/5
        [ResponseType(typeof(void))]
        public IHttpActionResult PutworkTasks(int id, workTasks workTasks)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
 
            if (id != workTasks.Id)
            {
                return BadRequest();
            }
 
            db.Entry(workTasks).State = EntityState.Modified;
 
            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!workTasksExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
 
            return StatusCode(HttpStatusCode.NoContent);
        }
 
        // POST: api/workTasks
        [ResponseType(typeof(workTasks))]
        public IHttpActionResult PostworkTasks(workTasks workTasks)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
 
            db.workTasks.Add(workTasks);
            db.SaveChanges();
 
            return CreatedAtRoute("DefaultApi", new { id = workTasks.Id }, workTasks);
        }
 
        // DELETE: api/workTasks/5
        [ResponseType(typeof(workTasks))]
        public IHttpActionResult DeleteworkTasks(int id)
        {
            workTasks workTasks = db.workTasks.Find(id);
            if (workTasks == null)
            {
                return NotFound();
            }
 
            db.workTasks.Remove(workTasks);
            db.SaveChanges();
 
            return Ok(workTasks);
        }
 
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
 
        private bool workTasksExists(int id)
        {
            return db.workTasks.Count(e => e.Id == id) > 0;
        }
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2022, 22:30
Ответы с готовыми решениями:

Почему не работают post запросы к api на Phalcon?
В сервисах установил заголовок на разрешение получать запросы с конкретного домена (у меня там фронтенд): $di-&gt;set( 'response', ...

WEB API: не работают кастомно-названные методы
Здравствуйте, только разбираюсь с сервисом, не работают кастомно-названные методы public class TasksController : ApiController ...

2 сервиса (WCF Web API и ASP.NET Web API) на одном хосте
Есть БД с юзерами Есть консольное приложение (OWIN selfhost) с контроллером ImportController : ApiController для выполнения POST запросов...

12
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
30.11.2022, 00:39
C#
1
2
3
4
5
[Route("api/workTasks")]
public IHttpActionResult GetworkTasks()
        {
            return Ok(db.workTasks.ToList().ConvertAll(p => new ResponseWorkTasks(p)));
        }
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
30.11.2022, 10:55  [ТС]
Dr9vik, добавила, но, к сожалению, не помогло, та же ошибка, на той же строке.
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
30.11.2022, 11:42
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
const string Url = "http://192.168.0.106:45457...
где запущена апи? порт совпадает?
вместо ip напишите http://localhost:45457
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
30.11.2022, 11:59  [ТС]
Dr9vik, А с локалхостом оно вообще не работает...
C#
1
System.Net.WebException: 'Failed to connect to localhost/127.0.0.1:45455'


UPD: да, порт поменялся со вчера, теперь 45455
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
30.11.2022, 12:01  [ТС]
Dr9vik,
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
30.11.2022, 12:04  [ТС]
Dr9vik, если честно, то я мало понимаю, и, кажется, что даже если случится какая-то магия и апи будет адекватно работать, то с мобилки невозможно будет получать/отправлять данные, используя через апи БД. Сервер должен быть постоянно запущен, это понятно, а апи как? Тоже должен быть постоянно запущен же? Но тут порт меняется каждый раз и как быть? Я же не могу каждый день переписывать строку url. Такое ощущение, что мобилка просто не будет видеть это всё и работать ничего не будет...
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
30.11.2022, 12:18
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
Тоже должен быть постоянно запущен же?
ну да
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
Но тут порт меняется каждый раз и как быть?
он не может просто так поменяться
темболее вы запускаете все локально
а по нормальному ваш сайт с апишками должен работать на веб сервере
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
30.11.2022, 13:25  [ТС]
Dr9vik, через postman всё ок, а в мобилке такие штуки.... так и не понимаю, почему она не может к апи достучаться.... миссия невыполнима( всё равно спасибо за помощь

Добавлено через 49 минут
Dr9vik, кстати, при попытке подрубиться к локалхосту, вместо ip, следующая ошибка
C#
1
System.Net.WebException: 'Error: ConnectFailure (Connection refused)'
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
30.11.2022, 13:43
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
System.OperationCanceledException: 'The operation was canceled.'
ну как правило это ошибка означает что клиент разорвал соединение
а
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
'Error: ConnectFailure (Connection refused)'
значит что по локалхосту ничего нету

может в дебаге все такие на апи заходит?
а клиент просто рвет соединение
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
30.11.2022, 15:01  [ТС]
Dr9vik, Я уже сделала публикацию на веб-сервере IIS, толку нет....
Цитата Сообщение от Dr9vik Посмотреть сообщение
может в дебаге все такие на апи заходит?
мне кажется, что нет, ибо прям как только переходит на строку сразу виснет, а потом
C#
1
System.Net.WebException: 'Error: ConnectFailure (Connection refused)'
Если это так, как вы подозреваете, то как можно решить это?

Добавлено через 46 минут
Dr9vik, на веб-хостинг загрузила api и БД, всё работает. Хотелось бы, чтобы сама БД не лежала на хостинге, а локально, но, видимо, это глупая мысль и невозможная
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
30.11.2022, 15:21
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
Хотелось бы, чтобы сама БД не лежала на хостинге, а локально, но, видимо, это глупая мысль и невозможная
это простреленные колени
еще статический айпи нужен
вобщем да
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
невозможная
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
30.11.2022, 15:40  [ТС]
Dr9vik, поняла. Как быть, с чем мучиться? Пытаться с локалхостом и тем ip? Я больше решений не вижу. Просто дексктоп будет висеть сильно, если юзать веб-хостинг, а мне нужно, чтобы и у мобилки и у десктопа была единая БД...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2022, 15:40
Помогаю со студенческими работами здесь

ASP.NET Core + Web API. Из контроллера обратится к web api
Добрый день. Сделал по метаниту WEB API, всё работает, но он в своём примере обращается к WEB API через Ajax запрос. А я хочу чтобы...

Проектирование WEB API. Проектирование авторизации и аутентификации для WEB API
Создать простой WEB API, который состоит из веб сервера и из БД. Минимальное количество таблиц 3. - обеспечить доступ к данным -...

WEB API + json api
Добрый всем бобр. Назрел сея вопрос, существуют RESTfull архитектура и если с ней и её принципами всё понятно, то что есть json api...

Не работают запросы
В первый раз делаю приложение $token = '66323197*****a9d46'; $fields = array( 'connection','site', 'education','contacts', ...

Не работают медиа-запросы
Мдемс, есть вот такой css3 код : .slidershow { float: left; clear: both; position: relative; width: 550px; height: 300px; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru