亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET Core Razor 頁面路由詳解

2024-07-10 13:32:39
字體:
來源:轉載
供稿:網友

 在服務器端 Web 應用程序框架中,其中非常重要的設計是開發人員如何將URL與服務器上的資源進行匹配,以便正確的處理請求。最簡單的方法是將 URL 映射到磁盤上的物理文件,在 Razor 頁面框架中,ASP.NET團隊就是這樣實現的。

關于 Razor 頁面框架如何將 URL 與文件相匹配,有一些規則您必須了解,以及如何根據需要自定義規則改變輸出的結果。如果您將 Razor 頁面與 Web Form 框架進行比較,您還需要了解取代的 Ur l參數以及在URL中傳遞數據的機制。

規則一,Razor 頁面需要一個根目錄。默認情況下,該根目錄是 Pages,位于Web應用程序項目的根目錄中。您可以在Startup類的ConfigureServices方法中配置其它文件夾作為根目錄。以下是將根目錄更改為位于應用程序 “Content” 文件夾:

 public void ConfigureServices(IServiceCollection services) {   services    .AddMvc().    AddRazorPagesOptions(options => {     options.RootDirectory = "/Content";   });  }

規則二,URL映射到Razor頁面,URL不包含文件擴展名。

規則三,“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傳遞參數

就像大多數其它框架一樣,參數可以作為查詢字符串在 URL 中傳遞,例如:www.domain.com/product?id=1;或者,您可以將其作為路由參數傳遞,因此上述示例將變為www.domain.com/product/1。URL的一部分必須映射到參數名稱,在頁面的路由模板來實現的,@page指令的一部分:

@page "{id}"

該模板告訴框架將頁面名稱之后URL的第一段作為“id”的路由參數。您可以通過多種方式訪問路由參數的值。第一個是使用RouteData字典:

@page "{id}"{ var productId = RouteData.Values["id"];}

或者,您可以向該頁面的OnGet()方法添加與路由參數相同名稱的參數,并將其值分配給公共屬性:

@page "{id}"@{ @functions{  public int Id { get; set; }  public void OnGet(int id)  {   Id = id;  } }}<p>The Id is @Id</p>

如果您使用的是PageModel,那么是這樣實現的:

using Microsoft.AspNetCore.Mvc.RazorPages;namespace RazorPages.Pages{ public class ProductModel : PageModel {  public int Id { get; set; }  public void OnGet(int id)  {   Id = id;  } }}
@page "{id}"@model ProductModel<p>The Id is @Model.Id</p>

最后,您可以在公有屬性使用BindProperty特性,并省略該OnGet方法中的參數。Razor 文件內容保持不變,但是PageModel代碼略有更改:

using Microsoft.AspNetCore.Mvc.RazorPages;namespace RazorPages.Pages{ public class ProductModel : PageModel {  [BindProperty(SupportsGet = true)]  public int Id { get; set; }  public void OnGet()  {  } }}

約束

此外,在此示例中參數的約束是它必須有一個值。URL www.domain.com/product/applewww.domain.com/product/21一樣有效,都是可以與路由匹配。如果您希望id值為整數,則可以通過將數據類型添加到模板來指定約束:

@page "{id:int}"

現在,如果您嘗試通過“apple”作為參數值,應用程序將返回404 Not Found狀態碼。

您可以指定值不是必需的,可以將參數設置為可為空類型:

@page "{id:int?}"

如果您的應用程序允許使用“apple”作為參數值,則可以指定只允許使用A-Z和a-z的字符:

@page "{id:alpha}"

您可以與最小長度要求相結合:

@page "{id:alpha:minlength(4)}"

更多的約束信息,可以查看微軟文檔。

友好URL

友好的URL能夠將 URL 映射到磁盤上的任意文件,打破根據文件名一對一的映射關系。您可以使用這個特性來不改變 URL 以進行SEO優化而不能重命名文件的問題,例如,如果希望所有請求由一個文件進行處理。友好 URL 在Startup類型的ConfigureServices方法中配置,調用RazorPagesOption類的AddPageRoute方法。以下示例將 URL www.domain.com/product 映射到Razor 頁面 “extras”文件夾“products.cshtml”文件:

 public void ConfigureServices(IServiceCollection services) {  services   .AddMvc()   .AddRazorPagesOptions(options =>   {    options.Conventions.AddPageRoute("/extras/products", "product");   }); }

如果您在 Web Forms 中使用過友好 URL,則應注意AddPageRoute方法的參數順序與 Web Forms MapPageRoute方法相反,文件路徑作為第一個參數。此外,AddPageRoute將路由模板作為第二參數,而不是路由定義,其中任何約束被單獨定義。

最后一個例子說明將所有請求映射到單個文件。如果站點內容存儲在特定位置(數據庫,Markdown文件),并且由單個文件(例如 “index.cshtml” )負責根據 URL 定位內容,然后將其處理為HTML,則可以執行此操作:

 public void ConfigureServices(IServiceCollection services) {  services   .AddMvc()   .AddRazorPagesOptions(options => {     options.Conventions.AddPageRoute("/index", "{*url}");  }); }

路由模板(*)通配符表示“全部”。即使使用此配置,磁盤上的現有文件和URL之間的匹配規則仍然正常運行。

總結

Razor 頁面中的路由系統非常直觀,基于文件位置,但如果需要覆蓋默認約定,它也非常強大,可配置。

原文:《Routing in Razor Pages》https://www.mikesdotnetting.com/article/310/routing-in-razor-pages

翻譯:Sweet Tang

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美体内谢she精2性欧美| 不卡av在线网站| 国产精品美女久久久久av超清| 粉嫩av一区二区三区免费野| 国产成人一区二区三区小说| 国产精品丝袜一区二区三区| 国产日韩欧美另类| 国产亚洲精品久久久久久777| 日韩av最新在线| 在线成人免费网站| 97视频在线观看亚洲| 国外成人在线播放| 成人激情av在线| 成人久久一区二区三区| 97av在线视频免费播放| 一区二区三区四区在线观看视频| 国产精品久久久久久五月尺| 亚洲性夜色噜噜噜7777| 亚洲美女av电影| 日韩av在线播放资源| 日韩av资源在线播放| xvideos成人免费中文版| 欧美巨猛xxxx猛交黑人97人| 久久av红桃一区二区小说| 亚洲a成v人在线观看| 成人免费xxxxx在线观看| 欧美做爰性生交视频| 欧美xxxx18国产| 国产成+人+综合+亚洲欧美丁香花| 国内精品小视频| 亚洲aⅴ男人的天堂在线观看| 日韩在线一区二区三区免费视频| 欧美久久精品一级黑人c片| 亚洲人成电影网站色www| 国产欧美亚洲视频| 91久久精品一区| 亚洲成人在线视频播放| 91成人福利在线| 久久久久成人精品| 日韩成人在线观看| 亚洲天堂开心观看| 欧美日韩在线第一页| 亚洲自拍中文字幕| 国产97在线播放| 欧美国产第二页| 国产精品久久久久久一区二区| 日韩亚洲欧美中文在线| 欧美激情喷水视频| 国产精品一区二区女厕厕| 国产丝袜精品视频| 国产视频亚洲精品| 两个人的视频www国产精品| 久久影视电视剧免费网站| 国产亚洲精品久久久久久牛牛| 国产香蕉一区二区三区在线视频| 欧美一区二区色| 亚洲精品久久久久国产| 青草青草久热精品视频在线观看| 国产欧美精品日韩精品| 国产一区二区三区在线| 九九久久久久久久久激情| 日韩av电影手机在线观看| 91久久精品国产| 国产精品久久久久久久久免费| 亚洲精品在线观看www| 91av在线免费观看| 久久精品中文字幕电影| 亚洲二区在线播放视频| 亚洲黄色在线看| 国产自产女人91一区在线观看| 久久久av亚洲男天堂| 久久精品亚洲一区| 欧美大奶子在线| 91麻豆桃色免费看| 美日韩精品免费视频| 精品久久久在线观看| 91精品视频一区| 欧美大码xxxx| 欧美日韩国产综合新一区| 国产精品pans私拍| 欧美成人亚洲成人日韩成人| 97超碰国产精品女人人人爽| 精品国产一区二区三区四区在线观看| 国产一区二区三区在线看| 欧美一区三区三区高中清蜜桃| 欧美亚洲第一区| 久久久av电影| 国产欧美一区二区三区久久人妖| 少妇激情综合网| 国产日本欧美视频| 欧美中文字幕视频在线观看| 亚洲激情小视频| 日本免费在线精品| 亚洲免费福利视频| 国产国产精品人在线视| 日本sm极度另类视频| 成人国产精品一区二区| 日韩欧美在线视频免费观看| 亚洲高清久久网| 成人信息集中地欧美| 日韩国产中文字幕| 久久精品亚洲94久久精品| 国产午夜精品一区二区三区| 国产精品18久久久久久麻辣| 国产精品av免费在线观看| 久久精品国产v日韩v亚洲| 欧美高清无遮挡| 国产精品一区二区久久精品| 97婷婷涩涩精品一区| 欧美一区二粉嫩精品国产一线天| 亚洲一区av在线播放| 国产日韩欧美在线| 亚洲色无码播放| 欧美自拍大量在线观看| 中文欧美在线视频| 亚洲自拍中文字幕| 一区二区三区久久精品| 51久久精品夜色国产麻豆| 欧美专区在线播放| 国产午夜精品免费一区二区三区| 久久国产精品偷| 在线免费观看羞羞视频一区二区| 精品国产老师黑色丝袜高跟鞋| 91国产中文字幕| 成人激情在线观看| 国产精品第一第二| 2018中文字幕一区二区三区| 国产91精品黑色丝袜高跟鞋| 7m第一福利500精品视频| 亚洲福利影片在线| 国产精品流白浆视频| 91在线看www| 91高清免费视频| 欧美黑人巨大xxx极品| 色偷偷亚洲男人天堂| 91亚洲人电影| 国产精品免费久久久久久| 欧美亚洲成人精品| 久久综合久中文字幕青草| 18性欧美xxxⅹ性满足| 91麻豆国产语对白在线观看| 亚洲永久免费观看| 亚洲精品午夜精品| 亚洲最大福利视频网站| 九九热在线精品视频| 亚洲а∨天堂久久精品喷水| 欧美视频第一页| 亚洲精品白浆高清久久久久久| 亚洲精品久久7777777| 日韩成人中文字幕| 5252色成人免费视频| 在线成人免费网站| 日韩中文字幕在线精品| 国产精品美女久久久久久免费| 在线看日韩欧美| 国产伦精品免费视频| 日韩欧美亚洲国产一区| 久久人人爽国产| 国模精品系列视频| 全球成人中文在线| 国产欧美精品在线播放| 91麻豆国产语对白在线观看| 久久精品国产99国产精品澳门| 日韩欧美亚洲一二三区|