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}");

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

Razor的数据绑定与数据校验

posted @ 2024-01-02 13:55  JohnYang819  阅读(25)  评论(0编辑  收藏  举报