Задать вопрос
@Nulltiton

Есть ли ошибки или нерациональные решения в коде приложения?

Проект реализует взаимодействие между двумя приложениями путем 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 и асинхронностью, поэтому понимаю, что код написан плохо. Буду благодарен любым советам по исправлению и оптимизации кода.
  • Вопрос задан
  • 136 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
1. Именование методов и классов: CheckId, ResponseProcessing, RequestClass, APIClass.

2. Лютая процедурщина с повсеместным использованием static.

3. Большинством соглашений принято писать "public static", а не "static public"

4. .Result внутри асинхронного метода

5. .Result внутри обработчика события чтобы дождаться чего-то, что в этом же обработчике и запущено через Task Run

6. лично я всё ещё против использования httpListener

7. Странный код внутри Check id
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы