内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何實現(xiàn)ASP.NETCoreRazor頁面路由-創(chuàng)新互聯(lián)

如何實現(xiàn)ASP.NET Core Razor頁面路由?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

10年的平?jīng)鼍W(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整平?jīng)鼋ㄕ镜娘@示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“平?jīng)鼍W(wǎng)站設(shè)計”,“平?jīng)鼍W(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

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

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

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

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

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

規(guī)則三,“Index.cshtml”是一個默認(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

在最后一個例子中,URL映射到兩個不同的文件 - 根目錄中的“account.cshtml”、“account”文件夾中的“index.cshtml”。Razor 頁面框架無法識別要選擇哪一個文件,因此如果您在應(yīng)用程序中實際同時擁有這兩個文件,那么如果您嘗試瀏覽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ù)的值。第一個是使用RouteData字典:

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

或者,您可以向該頁面的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,那么是這樣實現(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ù)的約束是它必須有一個值。URL www.domain.com/product/applewww.domain.com/product/21一樣有效,都是可以與路由匹配。如果您希望id值為整數(shù),則可以通過將數(shù)據(jù)類型添加到模板來指定約束:

@page "{id:int}"

現(xiàn)在,如果您嘗試通過“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}"

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

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

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

友好URL

友好的URL能夠?qū)?URL 映射到磁盤上的任意文件,打破根據(jù)文件名一對一的映射關(guān)系。您可以使用這個特性來不改變 URL 以進(jìn)行SEO優(yōu)化而不能重命名文件的問題,例如,如果希望所有請求由一個文件進(jìn)行處理。友好 URL 在Startup類型的ConfigureServices方法中配置,調(diào)用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,則應(yīng)注意AddPageRoute方法的參數(shù)順序與 Web Forms MapPageRoute方法相反,文件路徑作為第一個參數(shù)。此外,AddPageRoute將路由模板作為第二參數(shù),而不是路由定義,其中任何約束被單獨(dú)定義。

最后一個例子說明將所有請求映射到單個文件。如果站點(diǎn)內(nèi)容存儲在特定位置(數(shù)據(jù)庫,Markdown文件),并且由單個文件(例如 “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 頁面中的路由系統(tǒng)非常直觀,基于文件位置,但如果需要覆蓋默認(rèn)約定,它也非常強(qiáng)大,可配置。

關(guān)于如何實現(xiàn)ASP.NET Core Razor頁面路由問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道了解更多相關(guān)知識。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:如何實現(xiàn)ASP.NETCoreRazor頁面路由-創(chuàng)新互聯(lián)
URL分享:http://www.rwnh.cn/article46/dspchg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站排名、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
剑河县| 共和县| 义马市| 东平县| 策勒县| 蒲城县| 阳曲县| 无极县| 镇巴县| 清河县| 宁阳县| 泰安市| 雅安市| 胶南市| 黑河市| 含山县| 彰武县| 施甸县| 墨竹工卡县| 惠来县| 北安市| 新闻| 高雄县| 永清县| 修武县| 嘉义市| 辉南县| 师宗县| 德州市| 德阳市| 泌阳县| 巴林左旗| 梓潼县| 时尚| 天祝| 梁平县| 大足县| 金阳县| 昆山市| 瑞金市| 修水县|