You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Asp.Net Core中通过代码创建新Razor页面及文件夹

Asp.NET Core 代码方式创建Razor页面及对应文件夹实现方案

前置依赖

  • 基础的Asp.NET Core Razor Pages项目环境
  • 若需要运行时识别动态生成的页面,需提前安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet包

实现步骤

  1. 创建目标文件夹:通过IO接口判断并生成存放Razor页面的目标目录,默认Razor页面存放在项目根目录的Pages文件夹下
  2. 生成页面模板内容:按照Razor页面的规范拼接.cshtml视图文件和.cshtml.cs后台代码文件的内容
  3. 写入文件到指定路径:将生成的两份模板内容写入到目标文件夹的对应路径下
  4. 可选配置(运行时访问需配置):启用Razor运行时编译,让程序可以识别新增的页面文件

完整代码示例

using Microsoft.AspNetCore.Hosting;
using System.IO;

namespace YourProjectNamespace.Utils;

public class RazorPageGenerator
{
    private readonly IWebHostEnvironment _hostEnv;

    // 注入IWebHostEnvironment获取项目根路径
    public RazorPageGenerator(IWebHostEnvironment hostEnv)
    {
        _hostEnv = hostEnv;
    }

    /// <param name="relativeFolderPath">页面存放文件夹的相对路径,相对于/Pages根目录</param>
    /// <param name="pageName">Razor页面名称,不需要加后缀</param>
    public void GeneratePage(string relativeFolderPath, string pageName)
    {
        // 构造目标文件夹绝对路径
        var targetFolder = Path.Combine(_hostEnv.ContentRootPath, "Pages", relativeFolderPath);
        // 文件夹不存在则创建
        if (!Directory.Exists(targetFolder))
        {
            Directory.CreateDirectory(targetFolder);
        }

        // 生成.cshtml视图文件内容
        var cshtmlContent = $$"""
@page
@model {{relativeFolderPath.Replace("/", ".")}}.{{pageName}}Model
@{
    ViewData["Title"] = "{{pageName}}";
}
<h1>{{pageName}}</h1>
<!-- 页面内容可自定义扩展 -->
""";
        var cshtmlPath = Path.Combine(targetFolder, $"{pageName}.cshtml");
        File.WriteAllText(cshtmlPath, cshtmlContent);

        // 生成.cshtml.cs后台代码文件内容
        var csContent = $$"""
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace YourProjectNamespace.Pages.{{relativeFolderPath.Replace("/", ".")}};

public class {{pageName}}Model : PageModel
{
    public void OnGet()
    {
        // 逻辑代码可自定义扩展
    }
}
""";
        var csPath = Path.Combine(targetFolder, $"{pageName}.cshtml.cs");
        File.WriteAllText(csPath, csContent);
    }
}

注意事项

  • 代码中的YourProjectNamespace需要替换为你自己项目的实际命名空间
  • 运行时动态生成页面需要额外配置启用Razor运行时编译,在Program.cs中添加如下配置:
builder.Services.AddRazorPages()
    .AddRazorRuntimeCompilation();
  • 不建议在生产环境使用运行时动态生成Razor页面的方案,存在安全风险和性能损耗,该方案更适合开发阶段的脚手架工具使用

内容的提问来源于stack exchange,提问作者Ilya Vasunin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:54:03