旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

ASP.NET Core Razor页面路由的细致引见【C#.Net教程】,ASP.NET,Razor,Core

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:56评论:0


导读:这篇文章重要引见了ASP.NETCoreRazor页面路由详解,小编以为挺不错的,如今分享给人人,也给人人做个参考。一同追随小编过来看看吧在服务器端Web应用程...
这篇文章重要引见了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 映照文件
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 页面中的路由体系异常直观,基于文件位置,但假如须要掩盖默许商定,它也异常壮大,可设置。

以上就是ASP.NET Core Razor页面路由的细致引见的细致内容,更多请关注ki4网别的相干文章!

标签:ASP.NETRazorCore


欢迎 发表评论: