【问题标题】:Http Listener in .Net Core console app?.Net Core 控制台应用程序中的 Http 侦听器?
【发布时间】:2017-01-07 11:51:42
【问题描述】:

我开始研究 .net Core,我有点迷茫。

我正在尝试创建一个接受 Http 请求的控制台应用程序,例如 HttpListener,但它在 .net Core 上不存在。

我查了很多,只发现有些帖子不存在。

那么,我的问题是,是否可以在 .net Core 控制台应用程序中接受 Http 请求?

如果是,属于哪些课程?

干杯。

【问题讨论】:

  • 您可以使用 .NET Core 的 System.Net.Http 中的 HttpClient 来发送 HTTP 请求和接收 HTTP 响应。
  • 我不想做 Http 请求,我想接收它们。
  • 您可以使用 Sockets/TcpListener 自己实现一个 HttpListener。
  • @ShawnMclean 不,没有,您必须使用 Kestrel。但这是值得的,速度惊人。此外,您不需要使用完整的红隼管道,这就是我所做的,只需进入应用程序。运行您检索上下文并使用您希望撰写响应的上下文,最后是完全相同的作为 HttpListener 的功能。
  • @ShawnMclean 澄清一下,在您的应用程序的配置功能上,您获取应用程序,然后以这种方式执行app.Run(async (context) => { /* Whatever */ });,所有管道都被忽略,只有您的函数处理请求和响应。跨度>

标签: c# .net httprequest .net-core httplistener


【解决方案1】:

我正在交叉链接到 2017 年 5 月 13 日的另一个答案,该答案似乎对此主题有更新的答案: https://stackoverflow.com/a/43954956/1209443

据说使用“.NET Core 2.0,它有一个API compatible HttpListener 可以跨平台工作”

【讨论】:

  • 您应该将此添加为真实答案,添加信息和对您获取位置的参考。否则肯定会被删除。
  • 您只发布了一个链接,这不是 StackOverflow 的工作方式,您应该添加响应内容和一个指向您从中获取信息的链接。 stackoverflow.com/help/how-to-answer
【解决方案2】:

要构建自托管 Web 应用程序,请使用 VS2015 中通过 New Project -> Templates -> Web -> ASP.NET Core Web Application 安装的模板。

此向导创建一个自托管的 Web 应用程序。从入口Main方法可以看出它使用了WebHostBuilder,为其添加配置(尤其.UseKestrel表示Web服务器),并运行它。

除了模板之外,您还可以构建自己的简单网络服务器。在Startup.cs中的Configure方法中,可以使用

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

它允许您处理请求上下文并响应它。

更多详情,请查看this article

【讨论】:

  • 我不想要一个 Web 应用程序,我想创建一个接收 http 请求的控制台应用程序,我不想使用 ASP .net,只是像 HttpListener 这样的普通 HTTP 请求。
  • 不,它是一个 ASP .net core web 应用程序,控制台应用程序在 Templates -> .net Core -> Console Application 下。
  • @Gusman 你为什么不自己试试呢?模板仅帮助您添加依赖项,生成示例代码。它在windows中编译为.exe,可以通过命令行运行,而不是DLLs由web服务器加载。
  • Console 应用确实是.dll 文件,不是exe 的,你可以检查一下...另外,我不想使用Asp 环境,我只想接收普通的HTTP 请求,但我我开始认为 MS 只是想强迫我们使用 asp .net,这是不可能的......非常糟糕的主意 MS。
  • @Gusman 那么如何判断应用程序是控制台应用程序还是 Web 应用程序?
【解决方案3】:

使用下面的代码:

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();
            }
        }
    }

}

【讨论】:

  • 这似乎没有回答问题,我正在尝试创建一个控制台应用程序,该应用程序接受 Http 请求,如 HttpListener。您正在展示如何发出 http 请求并在控制台应用程序中获取结果。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2014-09-10
  • 1970-01-01
  • 2016-11-02
  • 2019-12-29
  • 2018-04-11
  • 2016-12-07
  • 1970-01-01
相关资源
最近更新 更多