Razor路由相关
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}");

可以发现UseStatusCodePagesWithReExecute和UseStatusCodePagesWithRedirects的区别是:前者仍然保留了4XX,5XX的状态码,后者一律全部为200;
Razor的数据绑定与数据校验
Razor路由相关的更多相关文章
- 从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案
标题:从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun ...
- CCNA2.0笔记_路由相关
路由器的工作内容 -路由器知道目标地址 -发现到达目标地址的可能的路由 -选择最佳路径(路由表) -维护路由信息 路由的来源 直连路由:直接连到路由器上的网络 -初始化情况下,路由器所知的网络,只有其 ...
- angular2 单元测试 路由相关
第一步:在html模板中,写路由链接,并保证有路由出口 第二步:写自定义的路由指令和路由出口组件,因为在单元测试中不需要引入真实的路由,此处我们用虚拟的代替即可. 第三步:将自定义的虚拟路由指令和路由 ...
- Orchard源码分析(7.1):Routing(路由)相关
概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等 ...
- vue开发路由相关基础知识和笔记
路由实现:hash模式 和 history模式 hash模式: 概述 在浏览器中符号"#",#以及#后面的字符称之为hash,用window.location.hash读取: 特点 ...
- linux添加ip、路由相关命令
1- Linux添加永久路由vi /etc/sysconfig/network-scripts/route-eth1ADDRESS0=192.168.10.0NETMASK0=255.255.255. ...
- angularjs路由相关知识
angular.module('app').config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRout ...
- Angular2 Router路由相关
路由设置 Angular中路由的配置应该按照先具体路由到通用路由的设置,因为Angular使用先匹配者优先的原则. 示例: 路由设置如下: export const reportRoute: Rout ...
- Vue路由相关配置
什么是路由? 1.在以前页面跳转使用的是超链接a标签或者js location.href,而路由是跳转切换组件的跳转方式 2.路由就是监听url的改变并提供相对应的组件用于展示 3.vue-route ...
- Flask之路由相关
1.装饰器中的参数 @app.route("/info", methods=["GET", "POST"]) def student_inf ...
随机推荐
- QT5笔记:13. QString 的常用功能
QString采用Unicode码,所以任何一个字符不管中英文,在size或者count时都算作一个字符,不会有宽字符区分 常用的方法 append prepend toUpper toLower l ...
- Clean WeChat X 微信垃圾清理工具,提升硬盘空间
Clean WeChat X是一款专业的微信清理工具,其拥有软件轻巧.干净.高效.免费等等特点,其能识别你电脑里的微信缓存.聊天记录.文件备份.小程序等等信息,方便大家选择性的清理文件. 多账号登录: ...
- Spark - [03] 资源调度模式
题记部分 一.Local模式 1.1.概述 Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试的. 可以通过以下几种方式设置Master (1)local:所欲计算都运行在一个 ...
- 从汇编层解读Golang的闭包实现:逃逸分析与性能影响
本文精心梳理了一系列面试中具有一定难度的高频Golang问题,其中部分知识点可能你之前未曾深入探究,然而它们却在面试和实际工作中至关重要. 包括:Golang的基础语法.并发模型.内存管理等核心知识点 ...
- DOS使用技巧整理 [典型案例分享]
最早于2008年系统地学习MS-Dos,当时刚初中毕业.从小深受父亲影响,对电脑的技术比较感兴趣,特别是对DOS.随着学习得不断深入,接触了大量数字媒体软件.框架还有编程界的知识,发现DOS有不可磨灭 ...
- Scala高阶函数 2(以函数作为返回值,函数柯里化,应用函数)
package com.wyh.day01 object ScalaFun4 { def main(args: Array[String]): Unit = { /** * 以函数作为返回值 */ d ...
- Vuex:让状态管理不再头疼的“管家”
如果你正在开发一个 Vue.js 应用程序,但发现自己被各种组件之间的状态共享问题搞得焦头烂额,那么 Vuex 就是你需要的"超级管家".Vuex 是专门为 Vue.js 设计的状 ...
- 痞子衡嵌入式:了解主从系统中i.MXRT系列MCU从主处理器接收App数据包超时机制
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是主从系统中i.MXRT系列MCU从主处理器接收App数据包超时机制. 在痞子衡旧文 <RT四位数Boot模式> 里的 1.2 ...
- SDF矩形(附圆角)公式推导
SDF矩形(附圆角)公式推导 矩形 一般情况下,我们会使用(top_left, top_bottom), (width, height)来定义一个矩形,但是对于SDF而言,使用(centerX, ce ...
- Efficient Scalable Multi-Party Private Set Intersection
论文学习:Efficient Scalable Multi-Party Private Set Intersection 这篇论文提出了一种基于双中心零共享(Bicentric Zero-Sharin ...