码迷,mamicode.com
首页 > Web开发 > 详细

将创建好的控制台应用改造成一个 ASP.NET Core 应用

时间:2020-09-12 21:49:41      阅读:43      评论:0      收藏:0      [点我收藏+]

标签:ext   image   中间   rgs   cat   bho   nbu   ted   构建   

上一节探讨和学习了:使用 donet new 命令创建一个控制台程序

ASP.NET Core 应用:

  • 一个ASP.NET Core应用构建在ASP.NET Core框架之上。
  • ASP.NET Core框架利用一个消息处理管道,完成对HTTP请求的监听、接收、处理和最终的响应。
  • ASP.NET Core 管道由一个服务器(Server)和若干中间件(Middleware)构成。
  • 当宿主(HOST)程序启动之后,管道被构建出来,作为管道“龙头”的服务器就开始监听来自客户端的HTTP请求。

将控制台应用改造成 ASP.NET Core 应用:

  1. 添加引用

    修改之前创建好的 HelloWorld 控制台应用项目下的 HelloWorld.csproj 文件如下:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
        <!--添加引用-->
        <!--添加针对“Microsoft.AspNetCore.App”的框架引用(FrameworkReference)被添加到 <ItemGroup /> 节点下 -->
        <ItemGroup>
            <FrameworkReference Include="Microsoft.AspNetCore.App"></FrameworkReference>
        </ItemGroup>
    </Project>
  2. 注册服务器中间件:

    2.1. 从应用承载或者寄宿(Hosting)方面来看:

    2.1.1 .NET Core 具有一个以 IHost/IHostBuilder 为核心的服务承载系统:任何需要长时间运行的操作都可以定义成 IHostedService 服务并通过该系统来承载。

    2.1.2. IHost 对象可以视为所有承载服务的宿主(Host),而 IHostBuilder 对象则是它的构建者(Builder)

    2.1.3. 一个 ASP.NET Core 应用本质上就是一个用来监听、接收和处理HTTP请求的后台服务,所以它被定义成一个 GenericWebHostService(实现了IHostedService接口),并将它注册到承载系统中,进而实现了针对 ASP.NET Core 应用的承载。

    2.1.4. 一个运行的 ASP.NET Core 应用本质上体现出为由一个服务器和若干中间件构成的消息处理管道,服务器解决针对HTTP请求的监听、接收和最终的响应,具体针对请求的处理则由它递交给后续的中间件来完成。这个管道是由 GenericWebHostService 服务构建的。

    2.1.5. ASP.NET Core 提供了集中原生的服务类型,比较常用的是 KestrelServer 和 HTTP.sys。

    2.1.5.1. KestrelServer 是采用 libuv 创建的跨平台的 Web服务器,可以在 Windows、MacOS 和 Linux 平台上使用。它不仅可以作为独立的Web服务器直接对外提供服务,还可以结合传统的Web服务器(如 IIS、Apache 和 Nginx)将它们作为反向代理来使用。

    2.1.5.2. HTTP.sys 则是一种只能在 Windows 平台上使用的Web服务器,由于它本质上是一个操作系统内核模式运行的驱动,所以能够提供非常好的性能。

  3. 对项目文件 Helloworld.csproj 做了修改之后,再对 Program.cs 中的 Main方法做如下改动:

    ★★★★★ 请先根据下方代码中注释前标注的数字作为顺序阅读??

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.Hosting;
    namespace HelloWorld
    {
        internal class Program
        {
            private static void Main(string[] args)
            {
                // 1.调用静态类型 Host 的 CreateDefaultBuilder 方法创建一个 IHostBuilder 对象
                Host.CreateDefaultBuilder()
                    // 4. 在调用 Build 方法构建 IHost 对象之前,可以调用 IHostBuilder 接口的 ConfigureWebHost 扩展方法,并利用指定的 Action<IWebHostBuilder> 委托对象构建 ASP.NET Core 应用的请求处理管道。
                    .ConfigureWebHost(webHostBuilder => webHostBuilder
                        // 4.1. 调用 IWebHostBuilder 接口的 UseKestrel 扩展方法将 KestrelServer 注册为服务器
                        .UseKestrel()
                        // 4.2. 调用 Configure 扩展方法注册了用来处理请求的中间件
                        // 4.3. Configure 扩展方法的输入参数是一个 Action<IApplicationBuilder> 对象,所需的中间件注册在 IApplicationBuilder 对象上
                        .Configure(app => app
                            // 4.4. 注册的唯一中间件是通过调用 IApplicationBuilder 接口的 Run 扩展方法注册的,该中间件利用指定的 Func<HttpContext, Task> 对象将响应的主题内容设置为 “Hello World.”
                            .Run(context => context.Response.WriteAsync("Hello World."))
                        )
                    )
                    // 2. 并最终调用该对象的 Build 方法构建作为服务宿主的 IHost 对象。
                    .Build()
                    // 3. 当调用 IHost 对象的Run 扩展方法时,ASP.NET Core 应用程序将会被启动。
                    .Run();
            }
        }
    }

    将代码修改为如上之后,可以使用 dotnet run 命令或直接在 VS 中运行结果如下:

    技术图片

    注册的 KestrelServer 会绑定到 http://localhost:5000/ 和 https://localhost:5000/ 这两个地址监听请求。访问两个地址都会得到如下结果:

    技术图片

    返回的内容毫无疑问就是中间件写入的。

  4. 修改 SDK

    每个 .NET Core 应用都针对一种具体的 SDK 类型。之前创建的控制台应用默认采用的 SDK 类型为 “Microsoft.NET.Sdk”,而 ASP.NET Core 应用通常采用另一种名为 “Microsoft.NET.Sdk.Web” 的类型。

    若将 SDK 类型设置为 “Microsoft.NET.Sdk.Web”,就可以将针对 “Microsoft.AspNetCore.App” 的框架引用从项目文件中删除。

    若由于不需要利用生成的 .exe 文件启动 ASP.NET Core 应用,所以将 XML 元素 <OutputType>Exe</OutputType> 从 <PropertyGroup> 节点中删除。

    最终的项目文件(Helloworld.csproj)如下:

    <Project Sdk="Microsoft.NET.Sdk.Web">
        <PropertyGroup>
            <TargetFramework>netcoreapp3.1</TargetFramework>
        </PropertyGroup>
    </Project>

将创建好的控制台应用改造成一个 ASP.NET Core 应用

标签:ext   image   中间   rgs   cat   bho   nbu   ted   构建   

原文地址:https://www.cnblogs.com/vtings/p/13593833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!