日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.Net Core Razor 页面路由

發布時間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.Net Core Razor 页面路由 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在服務器端 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中缺少文件名,該請求將被映射到指定文件夾中的“Index.cshtml”。以下是一些URL如何映射到文件路徑的示例:

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/apple與www.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
本文地址:http://www.cnblogs.com/tdfblog/p/razor-pages-route-in-asp-net-core.html

相關文章:?

  • .NET Core 2.0 正式發布信息匯總

  • .NET Standard 2.0 特性介紹和使用指南

  • .NET Core 2.0 的dll實時更新、https、依賴包變更問題及解決

  • .NET Core 2.0 特性介紹和使用指南

  • Entity Framework Core 2.0 新特性

  • 體驗 PHP under .NET Core

  • .NET Core 2.0使用NLog

  • 升級項目到.NET Core 2.0,在Linux上安裝Docker,并成功部署

  • 解決Visual Studio For Mac Restore失敗的問題

  • ASP.NET Core 2.0 特性介紹和使用指南

  • .Net Core下通過Proxy 模式 使用 WCF

  • .NET Core 2.0 開源Office組件 NPOI

  • ASP.NET Core Razor頁面 vs MVC

  • Razor Page–Asp.Net Core 2.0新功能 ?Razor Page介紹

  • MySql 使用 EF Core 2.0 CodeFirst、DbFirst、數據庫遷移(Migration)介紹及示例

  • .NET Core 2.0遷移技巧之web.config配置文件

  • asp.net core MVC 過濾器之ExceptionFilter過濾器(一)

  • ASP.NET Core 使用Cookie驗證身份

  • ASP.NET Core MVC – Tag Helpers 介紹

  • ASP.NET Core MVC – Caching Tag Helpers

  • ASP.NET Core MVC – Form Tag Helpers

  • ASP.NET Core MVC – 自定義 Tag Helpers

  • ASP.NET Core MVC – Tag Helper 組件

原文地址:http://www.cnblogs.com/tdfblog/p/razor-pages-route-in-asp-net-core.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的ASP.Net Core Razor 页面路由的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。