使用CLI建立控制檯應用程序web
dot new console -n helloworld
編輯項目文件shell
<ItemGroup> <FrameworkReference include = "Microsoft.AspNetCore.App"></FrameworkReference> </ItemGroup>
建立Host主機並配置json
在Main方法中,調用靜態類Host的CreateDefaultBuilder方法,建立一個IHostBuilder對象,並調用Builder方法構建服務宿主的IHost對象,再調用IHost對象的擴展方法Run,AspNetCore應用程序就被啓動了。c#
var builder = Host.CreateDefaultBuilder(); IHost host = builder.Build(); host.Run();
配置請求管道服務器
在調用Builder方法以前,調用ConfigureWebHost擴展方法,參數是Action
var builder = Host.CreateDefaultBuilder(); builder.ConfigureWebHost(options => { options.UseKestrel().Configure(app => { app.Run(context => context.Response.WriteAsync("HelloWord")); }); }); IHost host = builder.Build(); host.Run();
launchSetting.json配置文件app
修改項目配置文件,並從新加載,這時你會發現 控制檯應用程序 變成了 web應用程序。框架
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> </Project>
CLI啓動,並指定Kestrel服務器ui
dotnet run --launch-profile helloworld
註冊服務與中間件code
AspNetCore Mvc就是創建在用來實現路由的EndpointRoutingMiddleware中間件和EndpointMiddleware中間件上的。因此咱們開始改造。
內置的依賴注入框架之後會深刻了解,如今拿來直接用。
var builder = Host.CreateDefaultBuilder(); builder.ConfigureWebHostDefaults(options => { options.ConfigureServices(configureServices => { //註冊服務 configureServices.AddRouting(); configureServices.AddControllersWithViews(); }).Configure(app => { //使用服務 app.UseRouting(); app.UseEndpoints(endpoint => { endpoint.MapControllers(); }); }); }); IHost host = builder.Build(); host.Run();
添加控制和視圖
添加一個類HelloController,而後繼承controller。
public class HelloController : Controller { [HttpGet("/hello/{name}")] public IActionResult SayHello(string name) { ViewData["Name"] = name; return View(); } }
@{ ViewData["Title"] = "SayHello"; } <h1>@ViewData["Name"]</h1>
註冊Startup類型
以上能夠直接跑起來,如今開始註冊Startup類,約定大於配置嘛,因此咱們把註冊服務配置中間件的過程提取出來,單獨放在一個類中,這樣就方便之後維護了。
修改Main方法
private static void Main(string[] args) { Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(configure => configure.UseStartup<Startup>() ).Build().Run(); }
Startup類
public class Startup { public void ConfigureServices(IServiceCollection services) => services.AddRouting().AddControllersWithViews(); public void Configure(IApplicationBuilder app) => app.UseRouting().UseEndpoints(point => point.MapControllers()); }