zoukankan      html  css  js  c++  java
  • 03、NetCore2.0下Web应用之搭建最小框架

    03、NetCore2.0下Web应用之搭建最小框架
    这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的理解Asp.Net Core 2.0网页应用程序的最小脉络框架。
     ------------------------------------------------------------------------------------------------------------

     写在前面:这是一个系列的文章,总目录请移步:NetCore2.0技术文章目录------------------------------------------------------------------------------------------------------------

     一、创建一个干净的控制台程序

    这里我们使用的开发工具是VS2017
    项目只有一个Program.cs类。
     
    二、让控制台程序可以响应Web请求
    1.让控制台程序成为Web宿主,需要引用WebHost包
    Microsoft.AspNetCore.Hosting
     
    2.我们不想用IIS作为服务器,可以使用Kestrel作为Web服务器
    Microsoft.AspNetCore.Server.Kestrel
     
    3.使用Nuget应必要包之后的项目结构
     
    4.指定Web服务器,并启动WebHost
    在Main方法中加入如下代码
    using Microsoft.AspNetCore.Hosting;
    
    namespace MyWeb
    {
        class Program
        {
            static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                    .UseKestrel()           // 指定WebServer为Kestrel
                    .UseStartup<Startup>()  // 配置WebHost
                    .Build();
    
                host.Run();                 // 启动WebHost
            }
        }
    }

    注:UserXXX是现在很流行的用法,一般是底层提供了一个插件框架(依赖倒置DI),并约定了一些接口规范,上层根据需要实现这些接口规范,通过UseXXX的方式注册到插件框架中。参考:05、NetCore2.0插件框架之Web应用启动流程源码初窥

    新建一个Startup类,用于配置WebHost
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.Extensions.Logging;
    using Microsoft.AspNetCore.Http;
    
    namespace MyWeb
    {
        class Startup
        {
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                app.Run(c => {
                    return c.Response.WriteAsync("Hello dotnet core.");
                });
            }
        }
    }
    5.启动我们这个干净的Web应用程序
     
    6.访问网站
     
    7.让网站的响应能力强一点
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.Extensions.Logging;
    using Microsoft.AspNetCore.Http;
    
    namespace MyWeb
    {
        class Startup
        {
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                app.Run(c => {
                    var req = c.Request.Path.ToString().TrimStart('/');
                    var res = string.Empty;
    
                    switch (req)
                    {
                        case "1":
                            res = "one";
                            break;
                        case "2":
                            res = "two";
                            break;
                        default:
                            res = "none";
                            break;                        
                    }
    
                    var mtd = string.Empty;
                    switch (c.Request.Method)
                    {
                        case "GET":
                            mtd = "请求方式: get";
                            break;
                        case "POST":
                            mtd = "请求方式:post";
                            break;
                        default:
                            mtd = "请求方式:none";
                            break;
                    }
    
                    return c.Response.WriteAsync(res);
                });
            }
        }
    }
    View Code
    效果如下:
    至此,我们使用Asp.Net Core 2.0创建了一个最小架构的Web应用程序。MVC、WebAPI是在此基础上的更高层次的封装。

    8.查看一下编译后的文件

    我们并没有看到我们使用Nuget应用的两个包,这也说明.NetCore2.0做了运行时包仓优化。

    参考:02、NetCore2.0优化之Nuget包

    【敦格原创】欢迎引用,请注明来源:http://www.cnblogs.com/netcore2
  • 相关阅读:
    项目范围管理定义范围
    项目时间管理估算活动资源
    项目时间管理排列活动顺序
    强悍!ultraEdit的文本比较
    网页刷流量软件开发中的困惑
    关于淘宝CSV格式的研究
    HTTP session登陆处理与登陆保持
    用ps将自己的图片字节数变最小
    通过TApplicationEvents响应消息
    有的女人就像易语言
  • 原文地址:https://www.cnblogs.com/netcore2/p/7410853.html
Copyright © 2011-2022 走看看