在没有 ASP.NET 核心的情况下使用 Kestrel

Posted

技术标签:

【中文标题】在没有 ASP.NET 核心的情况下使用 Kestrel【英文标题】:Using Kestrel without ASP.NET core 【发布时间】:2018-06-08 20:44:53 【问题描述】:

我想使用 Kestrel HTTP Server 来做与 ASP.NET 抽象无关的 HTTP 事情。我不想只安装 Kestrel 的任何 ASP.NET 包并使用请求/响应模型来编写快速/高性能的 HTTP 应用程序。

在过去,这是通过HttpListener 完成的,但由于现在一切都在 Linux 上运行,我无法使用 HTTP.sys。

每个 Kestrel 示例都展示了如何使用 WebHost 东西将其与 ASP.NET Core 一起使用。

我只想运行一个控制台应用程序,它会打开一个端口并给我 HTTP 请求。

我几乎 100% 确定这是可能的。我该怎么做?

【问题讨论】:

我相信 Kestrel 是用 .net 核心编写的,所以你很难不使用这些包。 使用docs.microsoft.com/en-us/dotnet/api/…和docs.microsoft.com/en-us/dotnet/api/… Kestrel 运行一系列的中间件,所以你只需要学习如何自定义加载哪些中间件组件,并移除所有与 ASP.NET Core 相关的,只留下你关心的,比如静态的文件中间件和 URL 重写中间件。 【参考方案1】:

Kestrel 在传输层和 Http 层都对 Asp.Net 包有很多依赖。即使您只想使用Kestrel.Transport 并实现自己的HttpServer,您也需要Kestrel.Transport.AbstractionKestrel.Transport.Socket 库中的Microsoft.AspNetCore.Hosting 之类的包。因此,如果您想删除这些依赖项,您需要对所有 Kestrel 类库进行完全自定义。

【讨论】:

以上是关于在没有 ASP.NET 核心的情况下使用 Kestrel的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Visual Studio 的情况下直接在 Docker 容器上运行 ASP.NET Core Web 应用程序

数据表中的多个子行,来自asp.net核心中sql server的数据

在 asp.net 核心中使用返回 url

如何在没有实体框架的情况下使用 ASP.NET Identity 3.0 [关闭]

在没有声明密码的情况下在 ASP.NET 中进行模拟

在没有回发的情况下重置 ASP.NET 中的页面