ASP.NET Core Routing

在前幾篇我們看 ASP.NET Core Middleware 的運作,
讀取 JSON 的 config 資訊,
再來我們先來看一下 Routing 的部份。

app.Map, RouteBuilder, MapGet, GetRouteValue ...

 

到目前不管網址為什麼都是顯示 Hello ...,

如果我們要依網址來顯示的話,我們用 app.Map 來處理(在Startup.cs's Configure Method),

例如 /rm 及 /louise 分別顯示 hello rm 及 louse,如下,

app.Map("/rm", 
	mapApp => mapApp.Run(async (context) => await context.Response.WriteAsync("Hello RM *** "))
);

app.Map("/louise",
	mapApp => mapApp.Run(async (context) => await context.Response.WriteAsync("Hello louise *** "))
);

而我們也可以改用 Routing 來處理,加入 Microsoft.AspNetCore.Routing 這個套件,

然後在 ConfigureServices Method 中加入 services.AddRouting();
在 Configure Method 中改用 MapGet 的方式,如下,

var routeBuilder = new RouteBuilder(app);
routeBuilder.MapGet("rm", async context => await context.Response.WriteAsync("Hello RM *** "));
routeBuilder.MapGet("louise", async context => await context.Response.WriteAsync("Hello louise *** "));
app.UseRouter(routeBuilder.Build());

執行起來是一樣的結果,如下,

當然,除了 MapGet 外,還有 MapPost, MapDelete, MapPut ... 可以使用 ...

因為是取得 Route 的 Value,所以我們可以用 template 的方式,再透過 GetRouteValue 去取出 Route 中的 Value,

而不需要一個一個去寫,如下,

var routeBuilder = new RouteBuilder(app);
routeBuilder.MapGet("{helloname}", async context => 
	await context.Response.WriteAsync($"Hello {context.GetRouteValue("helloname")} *** "));
app.UseRouter(routeBuilder.Build());

參考資料

ASP.NET 5 (ASP.NET Core 1.0) Middleware : Use, Map, MapWhen and Run

ASP.NET Core Middleware

Non-linear middleware chains in ASP.NET Core

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^