我正在使用Asp.net Core2.1 Razor页面技术。
我想询问有关剃刀页面之间传递和验证参数的问题。 请不要因为我问的是概念而不是编码:
现在假设我有博客,每个博客都由可以管理它的用户拥有。
用户使用以下URL进入管理页面:
https://localhost:44368/blogs/1/settings
如您所见,博客的ID在URL中:
public async Task<IActionResult> OnGetAsync(int? id)
{
// here i check that the blog is exist by the id
// and i check if the current user own the blog
}
然后在“设置”页面中,我有几个页面的链接,例如(文章) 并且用户可以管理这些文章。
https://localhost:44368/blogs/1/settings/articles
如您所见,我的URL中仍然有博客ID:
public async Task<IActionResult> OnGetAsync(int? id)
{
// now this function in the articles page
// again i check if the blog is exist
// and again i check if the current user can manage the blog or not
}
这是正确且好的做法吗?在每个页面中进行检查和验证
还是仅在进入设置页面时才检查?
或者我应该考虑一种方法,当用户进入设置页面时仅进行一次检查,那么用户不能基于第一次检查而进入其他页面!
答案 0 :(得分:0)
优良作法是保留网络端点stateless。
因此,将ID传递给每个子操作并验证此输入的方法是正确的。
要实施另一种方法,您只需检查一次ID,则需要在操作之间传递状态,例如作为会话状态。这种方法不太灵活。也许将来某天您希望能够从另一个页面而不是博客详细信息中打开设置?
还要记住,仅仅因为用户在页面上看不到某个链接,也没有什么可以阻止她输入例如https://localhost:44368/blogs/1/settings/articles
直接进入浏览器的地址栏。因此,在任何情况下,您都需要对每项操作进行验证。