Http Listener в консольном приложении .Net Core?

Я начинаю исследовать .net Core и немного запутался.

Я пытаюсь создать консольное приложение, которое принимает запросы Http, например HttpListener, но его нет в .net Core.

Я много искал и нашел только некоторые сообщения, ссылающиеся на то, что этого не будет.

Итак, мой вопрос, возможно ли принимать запросы Http в консольном приложении .net Core?

Если да, то с какими классами?

Ваше здоровье.


person Gusman    schedule 31.08.2016    source источник
comment
Вы можете использовать HttpClient в System.Net.Http из .NET Core для отправки HTTP-запросов и получения HTTP-ответа.   -  person Ha Hoang    schedule 31.08.2016
comment
Я не хочу делать Http-запросы, я хочу их получать.   -  person Gusman    schedule 31.08.2016
comment
Вы можете реализовать HttpListener самостоятельно, используя Sockets/TcpListener.   -  person masinger    schedule 31.08.2016
comment
Взгляните на github.com/robertsundstrom/HttpListener. Я думаю, это может помочь вам.   -  person Ha Hoang    schedule 31.08.2016
comment
Я сделал, но я не хочу использовать что-то настолько непроверенное, я не могу понять, почему .net Core не предлагает такой функциональности.   -  person Gusman    schedule 31.08.2016
comment
@ Гусман, ты нашел что-нибудь подобное? Я также ищу легкий слушатель без полноценного сервера, такого как пустельга.   -  person Shawn Mclean    schedule 27.04.2017
comment
@ShawnMclean Нет, вы должны использовать Kestrel. Но оно того стоит, скорость потрясающая. Кроме того, вам не нужно использовать полный конвейер пустельги, что я и сделал, просто перейдите в приложение. Запустите, где вы извлекаете контекст и используете контекст, как вы хотите, чтобы составить ответ, в конце точно так же функциональность как HttpListener.   -  person Gusman    schedule 27.04.2017
comment
@ShawnMclean, чтобы уточнить, в функции «Настройка» вашего приложения вы получаете приложение, а затем делаете app.Run(async (context) => { /* Whatever */ }); таким образом, что весь конвейер игнорируется, и только ваша функция обрабатывает запросы и ответы.   -  person Gusman    schedule 27.04.2017


Ответы (3)


Я ссылаюсь на другой ответ от 13 мая 2017 года, который, кажется, имеет более обновленный ответ на эту тему: https://stackoverflow.com/a/43954956/1209443

В нем говорится об использовании «.NET Core 2.0, который имеет совместимость с API HttpListener, работающий на разных платформах"

person nl-x    schedule 01.07.2019
comment
Вы должны добавить это как верный ответ, добавить информацию и ссылку на то, откуда вы ее взяли. В противном случае он будет удален наверняка. - person Gusman; 01.07.2019
comment
Вы разместили только ссылку, так не работает StackOverflow, вы должны добавить содержимое ответа и ссылку на то, откуда вы взяли информацию. stackoverflow.com/help/how-to-answer - person Gusman; 02.07.2019

Чтобы создать собственное веб-приложение, используйте установленные шаблоны в VS2015 через New Project -> Templates -> Web -> ASP.NET Core Web Application.

Этот мастер создает собственное веб-приложение. Из метода записи Main видно, что он использует WebHostBuilder, добавляет к нему конфигурации (особенно .UseKestrel указывает на веб-сервер) и запускает его.

Помимо шаблона, вы также можете создать свой собственный простой веб-сервер. В методе Configure в Startup.cs вы можете использовать

app.Run(async (context) =>
{
    await context.Response.WriteAsync("Hello World!");
});

Это позволяет вам обрабатывать контекст запроса и отвечать на него.

Дополнительные сведения см. в этой статье.

person Cheng Chen    schedule 31.08.2016
comment
Мне не нужно веб-приложение, я хочу создать консольное приложение, которое получает http-запросы, я не хочу использовать ASP .net, просто простые HTTP-запросы, такие как HttpListener. - person Gusman; 31.08.2016
comment
Нет, это основное веб-приложение ASP .net, консольные приложения находятся в разделе Шаблоны -> .net Core -> Консольное приложение. - person Gusman; 31.08.2016
comment
@Gusman Почему бы тебе не попробовать это самому? Шаблоны только помогают вам добавлять зависимости, генерировать образцы кода. Он компилируется в .exe в Windows и может запускаться через командную строку, а не DLLs загружаться веб-сервером. - person Cheng Chen; 31.08.2016
comment
Консольные приложения действительно являются файлами .dll, а не exe, вы можете это проверить... Кроме того, я не хочу использовать среду Asp, я просто хочу получать простые HTTP-запросы, но я начинаю думать, что MS просто хочет заставить нас использовать asp .net, и это просто невозможно... очень плохая идея MS. - person Gusman; 31.08.2016
comment
@Gusman Итак, как определить, является ли приложение консольным или веб-приложением? - person Cheng Chen; 31.08.2016
comment
Все, что не работает внутри WebHost, является консольным приложением, если оно работает внутри WebHost, это веб-приложение. - person Gusman; 31.08.2016
comment
Давайте продолжим обсуждение в чате. - person Cheng Chen; 31.08.2016
comment
Я проверил это и, как я думал, веб-приложения не открывают консоль и не могут читать ключи из нее, поэтому они совершенно разные. Может быть, он изменился с RC на V1.0? - person Gusman; 31.08.2016
comment
Он хочет реализовать HttpListener, чтобы он мог выполнять свои собственные действия. Этот ответ и все комментарии полностью упускают из виду. - person Arachnid; 08.10.2019

Поиграйте с кодом ниже:

using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        const int timeoutInDays = 1;
        Stream dataStream;
        StreamReader reader;

        while(true)
        {
            using (var httpClient = new HttpClient())
            {
                httpClient.Timeout = TimeSpan.FromDays(timeoutInDays);

                dataStream = await httpClient.GetStreamAsync("https://localhost:5001/api/v1/customers/streaming");

                reader = new StreamReader(dataStream);
                Console.WriteLine(await reader.ReadLineAsync());
                reader.Close();
            }
        }
    }

}
person Cristiano Dias    schedule 13.03.2021
comment
HttpClient не является HttpListener... - person Gusman; 15.03.2021
comment
Похоже, это не отвечает на вопрос: я пытаюсь создать консольное приложение, которое принимает HTTP-запросы, например HttpListener. Вы показываете, как делать http-запросы и получать результаты в консольном приложении. - person dbc; 15.03.2021