防止在 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>
我正在为 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>