在服務器端 Web 應用程序框架中,其中非常重要的設計是開發(fā)人員如何將URL與服務器上的資源進行匹配,以便正確的處理請求。最簡單的方法是將 URL 映射到磁盤上的物理文件,在 Razor 頁面框架中,ASP.NET團隊就是這樣實現(xiàn)的。
關于 Razor 頁面框架如何將 URL 與文件相匹配,有一些規(guī)則您必須了解,以及如何根據需要自定義規(guī)則改變輸出的結果。如果您將 Razor 頁面與 Web Form 框架進行比較,您還需要了解取代的 Ur l參數(shù)以及在URL中傳遞數(shù)據的機制。
規(guī)則一,Razor 頁面需要一個根目錄。默認情況下,該根目錄是 Pages,位于Web應用程序項目的根目錄中。您可以在Startup類的ConfigureServices方法中配置其它文件夾作為根目錄。以下是將根目錄更改為位于應用程序 “Content” 文件夾:
public void ConfigureServices(IServiceCollection services) { services .AddMvc(). AddRazorPagesOptions(options => { options.RootDirectory = "/Content"; }); }規(guī)則二,URL映射到Razor頁面,URL不包含文件擴展名。
規(guī)則三,“Index.cshtml”是一個默認文檔,這意味著如果
| URL | 映射文件 |
|---|---|
| www.domain.com | /Pages/Index.cshtml |
| www.domain.com/index | /Pages/Index.cshtml |
| www.domain.com/index | /Pages/Index.cshtml |
| www.domain.com/account | /Pages/account.cshtml 或者 /Pages/account/index.cshtml |
在最后一個例子中,URL映射到兩個不同的文件 - 根目錄中的“account.cshtml”、“account”文件夾中的“index.cshtml”。Razor 頁面框架無法識別要選擇哪一個文件,因此如果您在應用程序中實際同時擁有這兩個文件,那么如果您嘗試瀏覽www.domain.com/account,會拋出如下異常:
AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:
Page: /account/Index
Page: /account
URL傳遞參數(shù)
就像大多數(shù)其它框架一樣,參數(shù)可以作為查詢字符串在 URL 中傳遞,例如:www.domain.com/product?id=1;或者,您可以將其作為路由參數(shù)傳遞,因此上述示例將變?yōu)?code>www.domain.com/product/1。URL的一部分必須映射到參數(shù)名稱,在頁面的路由模板來實現(xiàn)的,@page指令的一部分:
@page "{id}"該模板告訴框架將頁面名稱之后URL的第一段作為“id”的路由參數(shù)。您可以通過多種方式訪問路由參數(shù)的值。第一個是使用
新聞熱點
疑難解答
圖片精選