解释 ASP.NET Core 中 Razor Pages 的工作原理


Razor Pages 通过采用基于文件的路由简化了传统的基于 MVC 的编程模型。Razor Pages 侧重于基于页面的场景来构建 Web 应用程序,而不是像传统的 ASP.NET MVC 应用程序那样使用控制器和视图。

一旦应用程序收到 HTTP 请求,它就会通过中间件管道移动,直到到达可以处理和处理它的中间件组件。通常,它是一个路由中间件,它将 URL 路径与配置的路由匹配。此路由定义为此特定请求调用哪个 Razor 页面。

一旦路由器选择了 Razor 页面,框架就会执行该 Razor 页面以生成最终的 HTML 响应。然后,此响应会返回到发出请求的客户端浏览器。

Razor Pages 文件是 Pages 文件夹中的 .cshtml 文件,类似于 ASP.NET MVC 应用程序中的 View 文件。每个视图都有一个关联的 C# 对象。此对象称为页面模型,它模拟页面的行为。通常,路由器通过在 Pages 文件夹中查找具有相同路径的 Razor 页面来将请求 URL 映射到单个 Razor 页面。

示例

实时演示

@page
@model IndexModel
@{
   ViewData["Title"] = "Home page";
}

<div class="text-center">
   <h1 class="display-4">Welcome</h1>
   <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

在上面的代码片段中,@page 指令指示该页面是 Razor 页面。第二行将 Razor 页面链接到 PageModel,IndexModel。接下来,在 @ 块内,我们有 C# 代码在不向响应写入任何 HTML 的情况下执行。我们还可以使用动态 C# 代码来呈现 HTML 和 Razor 页面内的普通静态 HTML。

Razor Pages 具有布局,它是定义应用程序通用元素(如页眉和页脚)的基本模板。此布局 HTML 会添加到 Razor 页面 HTML 中以生成完整的 HTML 响应,从而避免重复代码。

PageModel 类是 Razor 页面的“代码隐藏”,它执行实际的繁重工作,例如:处理业务逻辑、发出外部请求、从数据库获取数据等。所有 Page Model 类都派生自 PageModel 基类。它们还提供一个或多个页面处理程序,这些处理程序只是定义如何处理对 Razor 页面的请求的方法。

例如,以下是上面 Razor 页面的 PageModel。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;

namespace Razor.Pages{
   public class IndexModel : PageModel{
      private readonly ILogger<IndexModel> _logger;

      public IndexModel(ILogger<IndexModel> logger){
         _logger = logger;
      }

      public void OnGet(){

      }
   }
}

这些页面处理程序使用基于约定的命名,即页面处理程序的名称基于它们响应的 HTTP 动词。根据应用程序逻辑,处理程序可以返回 void,这告诉 Razor 页面返回 HTML 视图或以 IActionResult 形式返回其他数据。

Razor Pages 实现的重要一点是,它们将视图生成逻辑与实际数据计算或业务逻辑分离。这遵循关注点分离原则,并使应用程序保持可维护性。如果需要更改 UI,则可以在不修改业务逻辑的情况下执行此操作,反之亦然。

更新于:2021年6月22日

2K+ 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.