防止在 Razor Pages 中自动传递 URL 参数

Prevent automatic passing of URL parameter in Razor Pages

我正在为 Web 应用程序使用 .NET Core 2 "Razor Pages" 格式。它允许您使用顶部的简单指令定义如何将 URL 映射到变量名称:

@page "{personId:int?}"

例如,上面的代码会将 URL /Person/Index/123 映射到 IndexModel.OnGetAsync(int personId) 函数,因此 personId 的值为 123。

但是,我注意到如果页面上存在 link,这些值似乎会自动添加到它们可能存在的任何 URL 中。如果我将以下内容添加到索引页面:

<a asp-page="/Person/Details">Details</a>

…实际生成的HTML是:

<a href="/Person/Details/123">Details</a>

…意思是因为索引页面和详细信息页面在顶部都有相同的指令,所以personId的值在它们之间隐式传递。

有什么方法可以防止这种情况发生,这样 asp-page="/Person/Details" 就可以直接重定向到详细信息页面,而不会为 personId 传递任何值吗?

对于 Asp.Net Core,当前请求的当前路由值被视为 link 生成的环境值。

对于您的方案,personId 的 123 将被重新用于 <a asp-page="/Person/Details">Details</a> link 代。

从这个 url 生成过程中,您可以尝试从 RouteData

中删除值
        public async Task OnGetAsync(int? personId)
    {
        Person = await _context.Person.ToListAsync();
        RouteData.Values.Remove("personId");
    }

另一种更好的方法是,您可以尝试从 url 代中删除该值。

<a asp-page="/Person/Details" asp-route-personId="">Details</a>