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

Как связать WPF и WEB API

21.05.2022, 22:21. Показов 2724. Ответов 3

Студворк — интернет-сервис помощи студентам
Всем привет, изучаю C# и пытаюсь сейчас сделать приложение, мне нужно чтобы клиент WPF был связан с WEB Api, может кто-то может подсказать информацию, как это реализовать?*
(Я новичок в NET)
Изучал WEB API и в одном примере такая ситуация:
Подключен Microsoft.EntityFrameworkCore.SqlServer;
Есть UserController, который отвечает за http запросы и если БД пустая, то добавляет туда пару юзеров,
Я хотел доделать для практики этот пример и сделать клиент на WPF, но когда я начал делать первую кнопку, которая отправляет GET запрос на получение списка User'ов то столкнулся с проблемой, если запустить программу через Debug Visual Studio - то она запускается с определённым адресом указанным в lauchSettings:
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
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:6890",
      "sslPort": 44309
    }
  },
  "profiles": {
    "EmptyWebApiMetanit": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "applicationUrl": "https://localhost:7027;http://localhost:5027",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": false,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
Если же запускать .exe файл из папки Debug, то localhost будет иметь порт 5001, поэтому я не понимаю как должно происходить взаимодействие кнопок WPF и API, для кнопки я использовал такой код,:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private async void Button_Click(object sender, RoutedEventArgs e)
        {
            using (HttpClient client = new HttpClient())
            {
                var response = await client.GetAsync("http://localhost:5027/api/users/1");
                response.EnsureSuccessStatusCode();
                if (response.IsSuccessStatusCode)
                {
                    message.Content = await response.Content.ReadAsStringAsync();
                }
                else
                {
                    message.Content = $"Server error code {response.StatusCode}";
                }
            }
        }
При Debug'e всё работает корректно, но если запускать из папки(даже поменяв адрес на http://localhost:5001/api/users/1), приложение просто закрывается.

Я думаю я что-то делаю не так, не могли бы вы указать мне направление, возможно какая-то документация или статьи по этой теме, которые я не нашёл, заранее спасибо

Остальной код проектов
Кликните здесь для просмотра всего текста

UsersController
Кликните здесь для просмотра всего текста

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
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using EmptyWebApiMetanit.Models;
using System.Threading.Tasks;
 
namespace EmptyWebApiMetanit.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
            UsersContext db;
            public UsersController(UsersContext context)
            {
                db = context;
                if (!db.Users.Any())
                {
                    db.Users.Add(new User { Name = "Tom", Age = 26 });
                    db.Users.Add(new User { Name = "Alice", Age = 31 });
                    db.SaveChanges();
                }
            }
 
            [HttpGet]
            public async Task<ActionResult<IEnumerable<User>>> Get()
            {
                return await db.Users.ToListAsync();
            }
 
            // GET api/users/5
            [HttpGet("{id}")]
            public async Task<ActionResult<User>> Get(int id)
            {
                User user = await db.Users.FirstOrDefaultAsync(x => x.Id == id);
                if (user == null)
                    return NotFound();
                return new ObjectResult(user);
            }
 
            // POST api/users
            [HttpPost]
            public async Task<ActionResult<User>> Post(User user)
            {
                if (user == null)
                {
                    return BadRequest();
                }
 
                db.Users.Add(user);
                await db.SaveChangesAsync();
                return Ok(user);
            }
 
            // PUT api/users/
            [HttpPut]
            public async Task<ActionResult<User>> Put(User user)
            {
                if (user == null)
                {
                    return BadRequest();
                }
                if (!db.Users.Any(x => x.Id == user.Id))
                {
                    return NotFound();
                }
 
                db.Update(user);
                await db.SaveChangesAsync();
                return Ok(user);
            }
 
            // DELETE api/users/5
            [HttpDelete("{id}")]
            public async Task<ActionResult<User>> Delete(int id)
            {
                User user = db.Users.FirstOrDefault(x => x.Id == id);
                if (user == null)
                {
                    return NotFound();
                }
                db.Users.Remove(user);
                await db.SaveChangesAsync();
                return Ok(user);
            }
        }
    }

Класс User
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
namespace EmptyWebApiMetanit.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
 
    }
}

Класс UsersContext
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using Microsoft.EntityFrameworkCore;
 
 
namespace EmptyWebApiMetanit.Models
{
    public class UsersContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public UsersContext (DbContextOptions<UsersContext> options) 
            : base(options)
        {
            Database.EnsureCreated();
        }
    }
}

Program
Кликните здесь для просмотра всего текста

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
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using EmptyWebApiMetanit.Models;
 
var builder = WebApplication.CreateBuilder(args);
 
string con = "Server=(localdb)\\mssqllocaldb;Database=usersdbstore;Trusted_Connection=True;";
// устанавливаем контекст данных
builder.Services.AddDbContext<UsersContext>(options => options.UseSqlServer(con));
 
builder.Services.AddControllers();
 
var app = builder.Build();
 
app.UseDeveloperExceptionPage();
 
app.UseRouting();
 
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});
 
app.Run();

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2022, 22:21
Ответы с готовыми решениями:

WPF + ASP.NET Web API 2
Други, только начал изучать программирование. Не могли бы вы подсказать как создать проект по таким данным? REQUIRED CLIENT...

Отправка картинки на сервер из WPF - Web Api Core
Приветствую всех! Я новичок в вебе. Не совсем понимаю некоторые вещи... Сейчас тренируюсь и делаю простое приложение для отправки картинок...

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

3
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
21.05.2022, 22:50
Yan Kolosov, в Web Api можно конфигурировать интерфейсы, которые будет слушать Kestrel web server.
Например, через json-конфигурацию:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://localhost:5000"
      },
      "Https": {
        "Url": "https://localhost:5001"
      }
    }
  }
}
Соответственно, в вашем WPF-проекте тоже надо добавить конфигурацию для базового адреса, на который будут отправляться запросы.
0
0 / 0 / 0
Регистрация: 15.11.2021
Сообщений: 53
21.05.2022, 22:56  [ТС]
IamRain, не уверен что правильно понял, это не тоже самое, что делал я когда в файле lauchSettings.json
Менял указанные "applicationUrl"?
Просто когда я устанавливал их на https://localhost:5001 и в WPF у кнопки так же устанавливал https://localhost:5001 - WPF приложение всё равно закрывалось, как только кликал на кнопку
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
21.05.2022, 23:00
Нет, не то же самое - launchSettings.json используется для запуска нужного профиля в режиме отладки из самой IDE.
А конфигурация - это настройки работы самого приложения.
Цитата Сообщение от Yan Kolosov Посмотреть сообщение
WPF приложение всё равно закрывалось, как только кликал на кнопку
Возможно, необработанное исключение. Оберните в try/catch и смотрите, что происходит в режиме отладки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2022, 23:00
Помогаю со студенческими работами здесь

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

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

Как защитить WEB-API
Добрый день всем! Я сразу прошу прощение, если вдруг создал похожий топик, но поиск мне ничего похожего не выдал. Итак,к сути.. ...

[Web Api] Как настраивается роутинг?
Вопрос в том &quot;в какой последовательности сопоставляются роуты и экшины&quot;? (ветвет хотелось бы слышать в 2х вариантах: как решить мой...

Web API. Как проверить обработчик GET
Здравствуйте! Помогите пожалуйста с таким вопросом: Есть контроллер: public class SMSController : ApiController { public...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru