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

时间:2018-10-07 11:15:33

标签: asp.net-core parameter-passing url-routing razor-pages

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

@page "{personId:int?}"

例如,上面的方法会将URL /Person/Index/123映射到IndexModel.OnGetAsync(int personId)函数,以便personId的值为123。

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

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

…生成的实际HTML是:

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

…意味着由于“索引”和“详细信息”页面的顶部都具有相同的指令,因此personId的值将在它们之间隐式传递。

有什么方法可以防止这种情况发生,以便asp-page="/Person/Details"可以直接重定向到“详细信息”页面,而无需传递personId的任何值?

1 个答案:

答案 0 :(得分:2)

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

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

在此网址生成过程中,您可以尝试从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>