在没有 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.Abstraction
和Kestrel.Transport.Socket
库中的Microsoft.AspNetCore.Hosting
之类的包。因此,如果您想删除这些依赖项,您需要对所有 Kestrel 类库进行完全自定义。
【讨论】:
以上是关于在没有 ASP.NET 核心的情况下使用 Kestrel的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 Visual Studio 的情况下直接在 Docker 容器上运行 ASP.NET Core Web 应用程序
数据表中的多个子行,来自asp.net核心中sql server的数据