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

Url.Page()无法为带参数的默认Handler生成URL的问题求助

问题:ASP.NET Core Razor页面无法生成不带Handler且带参数的URL

在ASP.NET Core Web应用的Razor页面中,配置了包含{handler?}和参数的路由模板@page "{handler?}/{name?}",使用Url.Page()生成URL或返回Redirect()时,指定PageHandler的场景一切正常,但无法生成不带PageHandler且带参数的URL(如/Things/View?name=test)。

示例代码

Razor页面(View.cshtml)

@page "{handler?}/{name?}"
@model WebApplication1.Pages.Things.ViewModel

<p>@Html.DisplayFor(m => m.Name)</p>
<p>@Html.DisplayFor(m => m.TestUrl)</p>

后台PageModel代码

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication1.Pages.Things
{
    public class ViewModel : PageModel
    {
        public string Name { get; set; } = "";
        public string TestUrl { get; set; } = "";

        public void OnGet(string? name)
        {
            Name = name ?? "-- none --";
            // 原代码无法生成目标URL
            TestUrl = Url.Page("View", new { name }) ?? "-- no url --";
        }

        public void OnGetYellow(string? name)
        {
            Name = $"Yellow {name ?? "-- noname --"}";
            TestUrl = Url.Page("View", pageHandler: "Yellow", new { name }) ?? "-- no url --";
        }
    }
}

测试结果

测试URL页面生成的URL
https://localhost:7066/Things/View/Yellow/test/Things/View/Yellow/test
https://localhost:7066/Things/View/Yellow?name=test/Things/View/Yellow/test
https://localhost:7066/Things/View/Yellow/Things/View/Yellow
https://localhost:7066/Things/View/Things/View
https://localhost:7066/Things/View?name=test-- no url --

解决方案

要生成不带PageHandler但带查询参数的URL,需要显式指定pageHandler: null,让路由系统明确跳过handler路径段,将参数以查询字符串形式附加。

修改OnGet方法中的Url.Page调用:

TestUrl = Url.Page("View", pageHandler: null, new { name }) ?? "-- no url --";

修改后,当访问https://localhost:7066/Things/View?name=test时,页面会正确生成/Things/View?name=test的URL。

原因是默认情况下,路由系统会尝试将传入的name参数匹配到路由模板的{handler?}段,导致路由匹配失败;显式设置pageHandler: null后,路由系统会忽略handler路径段,将name作为查询参数处理。

内容的提问来源于stack exchange,提问作者H. de Jonge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:40:44