防止URL参数的自动传递剃刀页面(Prevent automatic passing of URL

2019-10-28 19:39发布

我使用的Web应用程序的.NET酷睿2“剃刀页”格式。 它允许您定义的URL变量名在顶部的简单指令映射:

@page "{personId:int?}"

以上,例如,将映射的URL /Person/Index/123IndexModel.OnGetAsync(int personId)功能,使得personId将具有123的值。

然而,我注意到,这些价值似乎被自动添加到他们可以任意网址,如果页面上存在的链接。 如果我以下内容添加到索引页:

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

...这就是产生实际的HTML是:

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

......这意味着,因为这两个指标和详细信息页面具有相同的指令在顶部,价值personId是隐含在它们之间传递。

有什么办法防止这种情况,使asp-page="/Person/Details"会简单地重定向到详细信息页面,而不经过任何价值personId

Answer 1:

对于Asp.Net Core ,当前请求的当前路线值被认为对于链接生成环境值。

对于您的情况,123 personId将被重新用于<a asp-page="/Person/Details">Details</a>链接生成。

从这个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>


文章来源: Prevent automatic passing of URL parameter in Razor Pages