欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core Razor 頁(yè)面路由詳解

 更新時(shí)間:2017年09月04日 08:18:39   作者:Sweet-Tang  
這篇文章主要介紹了ASP.NET Core Razor 頁(yè)面路由詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

 在服務(wù)器端 Web 應(yīng)用程序框架中,其中非常重要的設(shè)計(jì)是開(kāi)發(fā)人員如何將URL與服務(wù)器上的資源進(jìn)行匹配,以便正確的處理請(qǐng)求。最簡(jiǎn)單的方法是將 URL 映射到磁盤上的物理文件,在 Razor 頁(yè)面框架中,ASP.NET團(tuán)隊(duì)就是這樣實(shí)現(xiàn)的。

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

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

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

規(guī)則二,URL映射到Razor頁(yè)面,URL不包含文件擴(kuò)展名。

規(guī)則三,“Index.cshtml”是一個(gè)默認(rèn)文檔,這意味著如果

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

在最后一個(gè)例子中,URL映射到兩個(gè)不同的文件 - 根目錄中的“account.cshtml”、“account”文件夾中的“index.cshtml”。Razor 頁(yè)面框架無(wú)法識(shí)別要選擇哪一個(gè)文件,因此如果您在應(yīng)用程序中實(shí)際同時(shí)擁有這兩個(gè)文件,那么如果您嘗試瀏覽www.domain.com/account,會(huì)拋出如下異常:

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ù)名稱,在頁(yè)面的路由模板來(lái)實(shí)現(xiàn)的,@page指令的一部分:

@page "{id}"

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

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

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

@page "{id}"
@{
 @functions{

  public int Id { get; set; }

  public void OnGet(int id)
  {
   Id = id;
  }
 }
}
<p>The Id is @Id</p>

如果您使用的是PageModel,那么是這樣實(shí)現(xiàn)的:

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方法中的參數(shù)。Razor 文件內(nèi)容保持不變,但是PageModel代碼略有更改:

using Microsoft.AspNetCore.Mvc.RazorPages;

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

約束

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

@page "{id:int}"

現(xiàn)在,如果您嘗試通過(guò)“apple”作為參數(shù)值,應(yīng)用程序?qū)⒎祷?04 Not Found狀態(tài)碼。

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

@page "{id:int?}"

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

@page "{id:alpha}"

您可以與最小長(zhǎng)度要求相結(jié)合:

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

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

友好URL

友好的URL能夠?qū)?URL 映射到磁盤上的任意文件,打破根據(jù)文件名一對(duì)一的映射關(guān)系。您可以使用這個(gè)特性來(lái)不改變 URL 以進(jìn)行SEO優(yōu)化而不能重命名文件的問(wèn)題,例如,如果希望所有請(qǐng)求由一個(gè)文件進(jìn)行處理。友好 URL 在Startup類型的ConfigureServices方法中配置,調(diào)用RazorPagesOption類的AddPageRoute方法。以下示例將 URL www.domain.com/product 映射到Razor 頁(yè)面 “extras”文件夾“products.cshtml”文件:

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

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

最后一個(gè)例子說(shuō)明將所有請(qǐng)求映射到單個(gè)文件。如果站點(diǎn)內(nèi)容存儲(chǔ)在特定位置(數(shù)據(jù)庫(kù),Markdown文件),并且由單個(gè)文件(例如 “index.cshtml” )負(fù)責(zé)根據(jù) URL 定位內(nèi)容,然后將其處理為HTML,則可以執(zhí)行此操作:

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

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

總結(jié)

Razor 頁(yè)面中的路由系統(tǒng)非常直觀,基于文件位置,但如果需要覆蓋默認(rèn)約定,它也非常強(qiáng)大,可配置。

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

翻譯:Sweet Tang

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .NET數(shù)組使用中的注意事項(xiàng)小結(jié)

    .NET數(shù)組使用中的注意事項(xiàng)小結(jié)

    這篇文章主要介紹了.NET數(shù)組使用中的注意事項(xiàng),總結(jié)了常見(jiàn)的三個(gè)數(shù)組使用中的注意事項(xiàng),對(duì)于.NET初學(xué)者有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 編寫的vs2005水晶報(bào)表程序在vs2008下正常使用的一些實(shí)現(xiàn)方法

    編寫的vs2005水晶報(bào)表程序在vs2008下正常使用的一些實(shí)現(xiàn)方法

    以前用vs2005編寫的WEB程序,現(xiàn)在使用vs2008時(shí)總是出現(xiàn)水晶報(bào)表的錯(cuò)誤,不能使用。經(jīng)過(guò)本人實(shí)踐,總結(jié)一下錯(cuò)誤原因。
    2009-09-09
  • ASP.NET MVC的四種驗(yàn)證編程方式

    ASP.NET MVC的四種驗(yàn)證編程方式

    ASP.NET MVC采用Model綁定為目標(biāo)Action生成了相應(yīng)的參數(shù)列表,但是在真正執(zhí)行目標(biāo)Action方法之前,還需要對(duì)綁定的參數(shù)實(shí)施驗(yàn)證以確保其有效性,我們將針對(duì)參數(shù)的驗(yàn)證成為Model綁定,需要的朋友可以參考下
    2015-10-10
  • .Net Core創(chuàng)建Api進(jìn)行文件上傳功能

    .Net Core創(chuàng)建Api進(jìn)行文件上傳功能

    這篇文章主要介紹了.Net Core創(chuàng)建Api進(jìn)行文件上傳,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • .Net使用Cancellation?Framework取消并行任務(wù)

    .Net使用Cancellation?Framework取消并行任務(wù)

    這篇文章介紹了.Net使用Cancellation?Framework取消并行任務(wù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • asp.net mvc core管道及攔截器的理解

    asp.net mvc core管道及攔截器的理解

    這篇文章主要給大家介紹了關(guān)于asp.net mvc core管道及攔截器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用asp.net mvc core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Asp.net SignalR支持的平臺(tái)有哪些

    Asp.net SignalR支持的平臺(tái)有哪些

    Asp.net SignalR支持的平臺(tái)有哪些,這篇文章主要介紹了Asp.net SignalR支持的平臺(tái),需要的朋友可以參考下
    2016-04-04
  • Visual Studio 2015和 .NET Core安裝教程

    Visual Studio 2015和 .NET Core安裝教程

    這篇文章主要為大家詳細(xì)介紹了Visual Studio Community 2015和 .NET Core安裝圖文教程,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 常用的在數(shù)據(jù)庫(kù)中建立無(wú)限級(jí)樹(shù)形菜單的asp.net代碼

    常用的在數(shù)據(jù)庫(kù)中建立無(wú)限級(jí)樹(shù)形菜單的asp.net代碼

    經(jīng)常在項(xiàng)目中遇到建立無(wú)限級(jí)樹(shù)形菜單展示的效果,這里簡(jiǎn)單地做了一個(gè),基本后臺(tái)代碼如下
    2008-09-09
  • asp.net checkbox 動(dòng)態(tài)綁定id GridView刪除提示

    asp.net checkbox 動(dòng)態(tài)綁定id GridView刪除提示

    asp.net checkbox 動(dòng)態(tài)綁定id,需要的朋友可以參考下。雖然簡(jiǎn)單但不知道挺麻煩的。GridView刪除提示
    2009-10-10

最新評(píng)論