1.赋予参数

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

2.Generate URL

3.AddRazorPages 和 AddRazorPagesOptions 以及 AddRazorOptions

AddRazorPages:

AddRazorPages:

services.AddRazorPages() 方法用于注册Razor Pages服务。这是一个简单的方法,通常用于添加Razor Pages的基本支持,包括视图引擎的配置、Razor页面的服务注入等。它返回IMvcBuilder 对象,该对象允许进一步配置MVC服务。

services.AddRazorPages();

AddRazorPagesOptions:

services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
// 配置选项
});

AddRazorPagesOptions 是 IMvcBuilder 的一部分,通过 services.AddRazorPages().AddRazorPagesOptions(options => { /* configuration */ }),你可以进一步配置Razor Pages的一些选项。这包括路由规则、约定、过滤器等。

AddRazorOptions:

services.AddRazorPages()
.AddRazorOptions(options =>
{
// 配置视图引擎选项
});

AddRazorOptions 则用于配置Razor视图引擎的选项。通过 services.AddRazorPages().AddRazorOptions(options => { /* configuration */ }),你可以配置例如视图引擎的编译选项、命名空间等。

总的来说,AddRazorPages 用于注册基本的Razor Pages服务,而 AddRazorPagesOptions 和 AddRazorOptions 用于更详细地配置Razor Pages和Razor视图引擎的一些选项。你可以根据项目需求使用这些方法来定制化配置。

配置Razor视图引擎指的是对ASP.NET Core中使用的Razor视图引擎进行一系列的设置和调整,以满足特定项目的需求。Razor是一种用于创建动态Web页面的视图引擎,它使开发人员能够以一种类似于HTML的方式编写C#代码。在ASP.NET Core中,Razor用于构建Web应用程序的前端视图。

配置Razor视图引擎的过程包括设置编译选项、添加命名空间、配置页面布局、启用或禁用特定的功能等。以下是一些可能需要配置的方面:

编译选项: 配置Razor视图引擎的编译选项,例如启用或禁用调试模式、设置编译器版本等。

命名空间: 添加额外的命名空间,以便在Razor视图中使用特定的类或库。

页面布局: 配置默认的布局页面,这是一个包含通用结构和样式的共享模板。

视图组件: 启用或配置Razor视图组件,这是可重用的、自包含的UI组件。

// Startup.cs

using Microsoft.Extensions.DependencyInjection;

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddRazorOptions(options =>
{
// 配置视图引擎选项
options.CompileWithDebugInformation = true; // 启用调试信息
options.RootNamespace = "MyNamespace"; // 设置根命名空间
options.PageViewLocationFormats.Add("/Pages/Shared/{0}.cshtml"); // 添加页面视图位置格式
});
}
}

在上面的示例中,通过 AddRazorOptions 方法配置了一些视图引擎的选项,包括启用调试信息、设置根命名空间以及添加页面视图位置格式。

总的来说,通过配置Razor视图引擎,你可以优化和调整Razor视图的行为,以满足你的项目需求。

4.AddRazorPageOptions,AddPageRoute

opt.Conventions.AddPageRoute("/Test", "/johnyang-test");:这是在配置中的一项约定,通过这项约定,指定了一个自定义的路由规则。具体来说:

"/Test" 是要配置的页面的名称,表示 "/Pages" 文件夹下的 "Test.cshtml" 页面。

"/johnyang-test" 是指定的自定义路由模板,表示用户访问 "/johnyang-test" 路径时将会映射到 "/Pages/Test.cshtml"。

通过这样的配置,当用户访问 "/johnyang-test" 时,实际上会显示 "/Pages/Test.cshtml" 页面的内容。这样的灵活性使开发者能够自定义Razor Pages的路由规则,以满足项目中的具体需求,注意,并没有替换原有的路由模板,即"/test"。

 builder.Services.AddRazorPages().AddRazorPagesOptions(opt =>
{
opt.Conventions.AddPageRoute("/Test", "/johnyang-test");
});
@page
@model RazorTest.Pages.TestModel
@{ }
<p>This is Test....</p>
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; namespace RazorTest.Pages
{
public class TestModel : PageModel
{
public void OnGet()
{ }
}
}



5.RootDirectory的设置

在 ASP.NET Core Razor Pages 中,RootDirectory 是 AddRazorPagesOptions 的一个属性,用于指定 Razor Pages 的根目录。默认情况下,Razor Pages 的根目录是 "Pages" 文件夹,但你可以通过 RootDirectory 属性来更改它。

在上面的示例中,opt.RootDirectory = "/MyPages"; 将 Razor Pages 的根目录更改为 "/MyPages"。这意味着你的 Razor Pages 文件应该位于项目根目录下的 "MyPages" 文件夹中,而不是默认的 "Pages" 文件夹。

注意:更改了 RootDirectory 后,确保你的 Razor Pages 文件结构和命名空间等都与更改后的根目录相匹配。







6.IPageRouteModelConvention,IPageApplicationModelConvention,IPageHandlerModelConvention

在 ASP.NET Core Razor Pages 中,IPageRouteModelConvention、IPageApplicationModelConvention 和 IPageHandlerModelConvention 是一些接口,它们允许你定义约定和规则以自定义 Razor Pages 的行为。这些接口是一种插件式的方式,通过实现它们,你可以在应用程序启动时对页面模型进行更细粒度的控制。

  • IPageRouteModelConvention:

IPageRouteModelConvention 接口允许你配置和修改 PageRouteModel 对象,这是描述Razor页面路由信息的模型。

你可以使用 Apply 方法来修改页面模型的路由相关信息,例如更改路由模板、添加或删除约束等。

PageRouteModel 是 ASP.NET Core Razor Pages 中的一个模型类,用于描述和存储Razor页面的路由信息。每个Razor页面在运行时都会有一个相应的 PageRouteModel 对象,该对象包含了有关页面路由的元数据。

Selectors:

Selectors 属性是一个列表,包含了用于匹配请求的一组路由模板。一个页面可能有多个路由模板,例如,基于不同的 HTTP 方法或具有不同的约束。

ViewEnginePath:

ViewEnginePath 属性表示页面在视图引擎中的路径。通常,这与页面在文件系统中的路径相对应。

PageRouteHandlers:

PageRouteHandlers 属性是处理页面路由的一组处理程序,包括在页面执行过程中调用的方法。

RelativePath:

RelativePath 属性表示页面相对于应用程序根目录的路径。

RouteValues:

RouteValues 属性是一个字典,包含页面的路由值。这些路由值可以在页面中通过 @page 指令指定,也可以通过路由参数传递。

PageRouteModel 对象的创建和配置是由 ASP.NET Core 的 Razor Pages 框架在应用程序启动时进行的。你可以通过实现 IPageRouteModelConvention 接口,使用 Apply 方法来对 PageRouteModel 进行修改和定制。

public class CustomPageRouteConvention : IPageRouteModelConvention
{
public void Apply(PageRouteModel model)
{
// 自定义路由规则
model.Selectors[0].AttributeRouteModel.Template = "/custom-page-route";
}
}
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions.Add(new CustomPageRouteConvention());
});
  • IPageApplicationModelConvention:

IPageApplicationModelConvention 接口允许你配置和修改整个 PageApplicationModel 对象,该对象描述了整个Razor页面应用程序的模型。

可以使用 Apply 方法对应用程序级别的模型进行修改,例如添加全局过滤器、更改页面的约定等。

public class CustomPageApplicationModelConvention : IPageApplicationModelConvention
{
public void Apply(PageApplicationModel model)
{
// 添加全局过滤器
model.Filters.Add(new CustomGlobalFilter());
}
}
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions.Add(new CustomPageApplicationModelConvention());
});
  • IPageHandlerModelConvention:

    IPageHandlerModelConvention 接口允许你配置和修改 PageHandlerModel 对象,该对象描述了Razor页面处理程序(handler)的模型。

    使用 Apply 方法可以在处理程序级别对模型进行修改,例如更改处理程序的名称、添加约定等。
public class CustomPageHandlerModelConvention : IPageHandlerModelConvention
{
public void Apply(PageHandlerModel model)
{
// 修改处理程序名称
model.HandlerName = "CustomHandler";
}
}
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions.Add(new CustomPageHandlerModelConvention());
});

StatusCodePage相关

默认是:

添加app.UseStatusCodePages();

添加app.UseStatusCodePagesWithReExecute("/{0}");

且添加

@page
@model RazorTest.Pages._404Model
@{
}
<h1>
404 Error!!!
</h1>
<p>OMG,你来到了知识的荒原区</p>

改变为app.UseStatusCodePagesWithRedirects("/{0}");

可以发现UseStatusCodePagesWithReExecuteUseStatusCodePagesWithRedirects的区别是:前者仍然保留了4XX,5XX的状态码,后者一律全部为200;

Razor的数据绑定与数据校验

Razor路由相关的更多相关文章

  1. 从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案

    标题:从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun ...

  2. CCNA2.0笔记_路由相关

    路由器的工作内容 -路由器知道目标地址 -发现到达目标地址的可能的路由 -选择最佳路径(路由表) -维护路由信息 路由的来源 直连路由:直接连到路由器上的网络 -初始化情况下,路由器所知的网络,只有其 ...

  3. angular2 单元测试 路由相关

    第一步:在html模板中,写路由链接,并保证有路由出口 第二步:写自定义的路由指令和路由出口组件,因为在单元测试中不需要引入真实的路由,此处我们用虚拟的代替即可. 第三步:将自定义的虚拟路由指令和路由 ...

  4. Orchard源码分析(7.1):Routing(路由)相关

    概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等 ...

  5. vue开发路由相关基础知识和笔记

    路由实现:hash模式 和 history模式 hash模式: 概述 在浏览器中符号"#",#以及#后面的字符称之为hash,用window.location.hash读取: 特点 ...

  6. linux添加ip、路由相关命令

    1- Linux添加永久路由vi /etc/sysconfig/network-scripts/route-eth1ADDRESS0=192.168.10.0NETMASK0=255.255.255. ...

  7. angularjs路由相关知识

    angular.module('app').config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRout ...

  8. Angular2 Router路由相关

    路由设置 Angular中路由的配置应该按照先具体路由到通用路由的设置,因为Angular使用先匹配者优先的原则. 示例: 路由设置如下: export const reportRoute: Rout ...

  9. Vue路由相关配置

    什么是路由? 1.在以前页面跳转使用的是超链接a标签或者js location.href,而路由是跳转切换组件的跳转方式 2.路由就是监听url的改变并提供相对应的组件用于展示 3.vue-route ...

  10. Flask之路由相关

    1.装饰器中的参数 @app.route("/info", methods=["GET", "POST"]) def student_inf ...

随机推荐

  1. QT5笔记:13. QString 的常用功能

    QString采用Unicode码,所以任何一个字符不管中英文,在size或者count时都算作一个字符,不会有宽字符区分 常用的方法 append prepend toUpper toLower l ...

  2. Clean WeChat X 微信垃圾清理工具,提升硬盘空间

    Clean WeChat X是一款专业的微信清理工具,其拥有软件轻巧.干净.高效.免费等等特点,其能识别你电脑里的微信缓存.聊天记录.文件备份.小程序等等信息,方便大家选择性的清理文件. 多账号登录: ...

  3. Spark - [03] 资源调度模式

    题记部分 一.Local模式 1.1.概述 Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试的. 可以通过以下几种方式设置Master (1)local:所欲计算都运行在一个 ...

  4. 从汇编层解读Golang的闭包实现:逃逸分析与性能影响

    本文精心梳理了一系列面试中具有一定难度的高频Golang问题,其中部分知识点可能你之前未曾深入探究,然而它们却在面试和实际工作中至关重要. 包括:Golang的基础语法.并发模型.内存管理等核心知识点 ...

  5. DOS使用技巧整理 [典型案例分享]

    最早于2008年系统地学习MS-Dos,当时刚初中毕业.从小深受父亲影响,对电脑的技术比较感兴趣,特别是对DOS.随着学习得不断深入,接触了大量数字媒体软件.框架还有编程界的知识,发现DOS有不可磨灭 ...

  6. Scala高阶函数 2(以函数作为返回值,函数柯里化,应用函数)

    package com.wyh.day01 object ScalaFun4 { def main(args: Array[String]): Unit = { /** * 以函数作为返回值 */ d ...

  7. Vuex:让状态管理不再头疼的“管家”

    如果你正在开发一个 Vue.js 应用程序,但发现自己被各种组件之间的状态共享问题搞得焦头烂额,那么 Vuex 就是你需要的"超级管家".Vuex 是专门为 Vue.js 设计的状 ...

  8. 痞子衡嵌入式:了解主从系统中i.MXRT系列MCU从主处理器接收App数据包超时机制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是主从系统中i.MXRT系列MCU从主处理器接收App数据包超时机制. 在痞子衡旧文 <RT四位数Boot模式> 里的 1.2 ...

  9. SDF矩形(附圆角)公式推导

    SDF矩形(附圆角)公式推导 矩形 一般情况下,我们会使用(top_left, top_bottom), (width, height)来定义一个矩形,但是对于SDF而言,使用(centerX, ce ...

  10. Efficient Scalable Multi-Party Private Set Intersection

    论文学习:Efficient Scalable Multi-Party Private Set Intersection 这篇论文提出了一种基于双中心零共享(Bicentric Zero-Sharin ...