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包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM