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

如何在ASP.NET Core Razor Pages中适配/{clientName}/Forms/{page}路由?

在ASP.NET Core Razor Pages中实现/{clientName}/Forms/{page}路由并获取clientName参数

一、修改Program.cs配置路由

要实现指定的URL模式,需为Razor Pages的Forms区域配置自定义路由规则,具体操作如下:

  1. 注册Razor Pages服务时添加区域路由模板:
builder.Services.AddRazorPages(options =>
{
    // 为Forms区域的所有页面添加带clientName前缀的路由规则
    options.Conventions.AddAreaPageRoute("Forms", "/{clientName}/{area}/{page}");
});

该配置会让Forms区域内的所有页面匹配/{clientName}/Forms/{page}的URL模式,其中clientName为动态路由参数,area固定为Forms,page对应区域内的具体页面。

  1. 确保中间件中正确映射Razor Pages:
app.MapRazorPages();

这是Razor Pages的基础配置,必须保留以启用页面路由功能。

二、在页面中获取clientName参数

在Forms区域的页面后台代码(例如Areas/Forms/Pages/Index.cshtml.cs)中,有三种常用方式获取clientName参数:

方式1:直接作为OnGet方法参数接收

public class IndexModel : PageModel
{
    public IActionResult OnGet(string clientName)
    {
        // 直接使用clientName参数
        Console.WriteLine($"当前客户端名称:{clientName}");
        return Page();
    }
}

框架会自动将路由中的clientName值绑定到方法参数上。

方式2:使用[FromRoute]特性显式绑定

public class IndexModel : PageModel
{
    public string ClientName { get; set; }

    public IActionResult OnGet([FromRoute] string clientName)
    {
        ClientName = clientName;
        return Page();
    }
}

这种方式适合需要将参数绑定到页面模型属性的场景。

方式3:通过RouteData直接读取

public class IndexModel : PageModel
{
    public IActionResult OnGet()
    {
        var clientName = RouteData.Values["clientName"]?.ToString();
        if (!string.IsNullOrEmpty(clientName))
        {
            // 使用clientName
        }
        return Page();
    }
}

这种方式无需声明参数,直接从路由数据集合中提取值。

注意事项

  • 确保项目结构正确:Forms区域的页面必须放在Areas/Forms/Pages目录下,例如Areas/Forms/Pages/Contact.cshtml对应的URL为/{clientName}/Forms/Contact。
  • 若需默认页面(访问/{clientName}/Forms时跳转至Index页面),保持Index页面的默认路由特性即可,框架会自动匹配。

内容的提问来源于stack exchange,提问作者Abdalrhman Alkhulaqi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:50:56