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. Linux Vim 最全面教程:从入门到精通

    一.引言 Vim 是一款功能强大且在 Linux 系统中广泛使用的文本编辑器.它有着高效的编辑模式.丰富的快捷键以及众多强大的功能,对于想要深入学习 Linux 系统操作以及进行文本处理相关工作的新手 ...

  2. 如何测试网络是否支持ipv6地址?如何打开ipv6?

    疑难解答加微信机器人,给它发:进群,会拉你进入八米交流群 机器人微信号:bamibot 简洁版教程访问:https://bbs.8miyun.cn 一.什么是IPv6: 1.IPv6简介: IPv6是 ...

  3. Azure Data Factory - [01] 触发器

    题记部分 一.概述   Azure Data Factory(后面简称ADF)的触发器是一种机制,用于在特定事件发生时自动执行数据管道.触发器可以基于事件间隔.数据变化或其他外部事件来启动数据管道的执 ...

  4. Hadoop - hadoop自带MR案例:词频 WordCount

    词频 Word Count 1.在浏览器上访问 https://node01:9870 2.创建目录 /user 目录 bin/hdfs dfs -mkdir /user 如果未配置环境变量,需要到h ...

  5. SQL Server 2005与2008清空日志方法

    SQL2008 的收缩日志 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:SQL2005 清空日志的方法:Backup Log D ...

  6. winform 实现太阳,地球,月球 运作规律https://www.cnblogs.com/axing/p/18762710

    无图眼吊(动图)    缘由 最近我太太在考公学习,给我出了两道高中地理知识的题目,把我问的一头雾水,题目是这样的 第一题 第二题 看到这两道题,当时大脑飞速运转,差点整个身体都在自转了,所以产生了个 ...

  7. 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)

    FRP 是 Github 上开源的一款内网穿透工具,点击前往项目地址,该项目分为 frps 服务端和 frpc 客户端,通过在拥有公网 IP 的服务器上搭建服务端,然后在被穿透的机器上安装客户端,配置 ...

  8. k8s dial tcp 127.0.0.1:6443: connect: connection refused排查流程及解决思路

    前言 k8s 集群中,使用 kubelet 报错,如下: The connection to the server 127.0.0.1:6443 was refused - did you speci ...

  9. go 限流器 rate

    前言 Golang 官方提供的扩展库里就自带了限流算法的实现,即 golang.org/x/time/rate.该限流器也是基于 Token Bucket(令牌桶) 实现的. 限流器的内部结构 tim ...

  10. ORACLE忘记用户名和密码、解锁、查询

    一.Oracle忘记用户名和密码 1.打开命令提示符,输入命令sqlplus ,进入oracle控制台 2.用户名输入 sqlplus/as sysdba,口令:空(回车即可) 3.连接成功后,输入& ...