Проект реализует взаимодействие между двумя приложениями путем POST HTTP-запросов.
Приложение API, которое получает id машины и отправляет рандомное значение 1 или 0 в ответ.
Класс:
using System;
using System.IO;
using System.Net;
using System.Net.Http;
namespace API
{
internal class APIClass
{
public static HttpClient client = new HttpClient();
public static HttpListener listener = new HttpListener();
static public void SetListenerSettings()
{
listener.Prefixes.Add("http://localhost:9901/");
}
static public void StartAPI()
{
SetListenerSettings();
while (true)
{
listener.Start();
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
using Stream body = request.InputStream;
using var reader = new StreamReader(body, request.ContentEncoding);
string text = reader.ReadToEnd();
Console.WriteLine(text);
HttpListenerResponse response = context.Response;
string info = CheckId(text).ToString();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(info);
response.ContentLength64 = buffer.Length;
Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
listener.Stop();
}
}
static public short CheckId(string id)
{
return Convert.ToInt16(new Random().Next(2));
}
}
}
Метод Main:
internal class Program
{
static void Main(string[] args)
{
APIClass.StartAPI();
}
}
Второе приложение забирает id машины из idTextBox, отправляет его HTTP-запросом первому приложению, дожидается ответа, расшифровывает число 1 и 0, как "Работает" и "Не работает" соответственно и кладет это значение в answerTextBox.
Класс:
using System.Net.Http;
using System.Threading.Tasks;
namespace WinApp
{
internal class RequestClass
{
static public HttpClient client = new HttpClient();
static public async Task<string> Send(string text)
{
var content = new StringContent(text);
var response = await client.PostAsync("http://localhost:9901/", content);
return response.Content.ReadAsStringAsync().Result.ToString();
}
static public string ResponseProcessing(string text)
{
switch (text)
{
case "0":
return "Не работает";
case "1":
return "Работает";
default:
return "Произошла ошибка";
}
}
}
}
Код формы:
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void requestButton_Click(object sender, EventArgs e)
{
var responceTask = Task.Run(() => RequestClass.Send(idTextBox.Text));
string response = responceTask.Result;
answerTextBox.Text = RequestClass.ResponseProcessing(response);
}
}
Условием выполнения проекта является два приложения: WinForm и консоль. Впервые работал с HTTP, API и асинхронностью, поэтому понимаю, что код написан плохо. Буду благодарен любым советам по исправлению и оптимизации кода.