不要更改地址中的路由器值

问题描述

我有一个带有 @ActionLink页面(索引),可以打开另一个页面来编辑发票,页面将正确显示,但 [Url-address] 显示发票编号,而当我在[Url-address]中更改发票的编号时,意味着他打开了另一张发票,我希望修改页面不要从通过修改[Url -address] 或使用直接链接,我找到了一个不错的方法,但它用于 [Post] 而不是 Get。有没有办法保护页面的 [Url-address] 不被修改及其值?

查看索引:

@Html.ActionLink(
    linkText: "Edit_Invoice",actionName: "Invoice_Edit",controllerName: "Invoice",routeValues: new { ID_Invoice = 2 },htmlAttributes: new { area = "Pro"})

控制器:

[HttpGet]

public ActionResult Invoice_Edit(int id_invoice)
{
    Table.Invoice invoice = (from i in Cn.Invoice 
                             where i.ID_Invoice == id_invoice 
                             select i).FirstOrDefault();
  
        return View(invoice;
}

查看发票_编辑:

@Html.TextBoxFor(m => m.ID_Invoice)
@Html.TextBoxFor(m => m.Date_Invoice)

<button>save</button>

当您打开发票修改页面时,其编号将出现在地址中,如下面的链接

https://localhost:44320/Pro/Invoice/Invoice_Edit?ID_Invoice=2

我只想打开从页面中选择的发票。

更新 1:更改标题答案

解决方法

如果你什么用户只打开他们被允许打开的发票,防伪令牌与它无关。您需要服务器端验证、身份验证和授权。所有这些都应该在服务器端实现。客户端 javascript 代码是不够的。

防伪令牌对于您不修改和保留数据的任何请求没有多大意义。因此,我建议从您的 GET 中删除 [ValidateAntiForgeryToken],因为 GET 请求将返回给用户,而不是攻击者。

AntiForgeryToken 是为 POST 请求而设计的,它需要 Request.Form 集合中的令牌。您可以只使用 post 而不是 get 来接收数据。或者你可以使用ajax。谷歌,你会找到一些例子。

但请确保在创建、更新或删除数据时使用它们。