ASP.NET Core 2.0 的 Razor Page 下集

  • 942
  • 0
  • 2017-11-02

上集談論過了 Razor Page 的基本的想法和用法,其實你會發現若你熟悉 ASP.NET Core MVC Framework 的運作方式,Razor page 對你來說將是非常容易上手的東西.只要你把 Page Model 懂熟一點,許多功能以前能做的,現在也可以很快地做出來.

在這一集的內容中,我記錄一下跟 Razor Page 基礎設定有關的事情.

若你看過我前面寫的一系列 ASP.NET Core 文章,你便能知道 ASP.NET Core 有個很重要的功能就是把你想要加的附屬功能全部集中在 Startup class 的 ConfigureServices() 裡面.Startup class 這名稱不是必要固定成 Startup,只是從範本上都慣用 Startup 這名字而己.重點是在 ConfigureServices 裡頭,這裡面用來加入你所需要的其他服務來讓提供 ASP.NET Core 整個應用程式使用,例如,你可以在這裡加入你所要用的 database service,或是 identity service,或是在這定義那些元件要加入 ASP.NET Core 的 dependency injection 容器裡.同樣的,有關 Razor Page 的基礎服務也是在這裡設定.參考如下:

services.AddMvc(options =>
{
    options.SslPort = 444;
    options.Filters.Add(new RequireHttpsAttribute());
})
.AddRazorPagesOptions(options =>
{
    options.RootDirectory ="/PageRoot2";
    options.Conventions.AuthorizeFolder("/Admin/Manage");
    options.Conventions.AuthorizePage("/Account/Logout");
    options.Conventions.AllowAnonymousToFolder("/Folder1");
    options.Conventions.AllowAnonymousToPage("/Folder2/EveryonePage");
});

AddRazorPagesOptions 是讓你為 Razor Page 做些基礎服務的設定.以上面的程式碼為例,這是在 ConfigureServices() 中某片段的程式碼,AddMvc() 是為你的 ASP.NET Core 應用程式加上 MVC 服務,在這方法裡面,你可以設定使用的 SSL port 是 444 並且設定 MVC 需要有 HTTPS 協定的情況下才能使用.AddRazorPagesOptions() 必須跟在 AddMvc() 之後,因為 AddMvc() 回傳的資料類型是 IMvcBuilder,這裡面在 2.0 版本中提供了 AddRazorPagesOptions.就像 AddMvc() 的定義,它也能接受一個 C# Action 來讓你設定 RazorPageOptions (它定義在 Microsoft.AspNetCore.Mvc.RazorPages namespace 裡面).這個 class 提供了許多你可以設定的 Razor Page 組態.以上述程式碼來看,我們可以將 Root 目錄更改掉 (預設是在 Pages 目錄),也可以為某個目錄或某個 Page 設定只有權限驗證過的使用者才能用,也可以為某個目錄或 Page 設定所有人皆可讀取.這些權限設定必須配合 Identity service 的使用.我先前有一篇文章曾提過如何用 Google account 做為 ASP.NET Core 的 Identity service,一起搭配使用時,這些權限設定便會有效用.

在工具的部份,Razor 編輯器和 Scaffolding 工具以前有支援 MVC,現在也有支援 Razor Page,但前提是你得用 Visual Studio 2017 15.3 update 才行.

Hope it helps,