Asp.net mvc 如何在URL中隐藏查询字符串参数

Asp.net mvc 如何在URL中隐藏查询字符串参数,asp.net-mvc,asp.net-mvc-3,query-string,Asp.net Mvc,Asp.net Mvc 3,Query String,我有一个Telerik网格,其中我使用客户机模板对每个记录进行编辑/删除操作。因此,对于编辑/删除操作,我需要将该记录的id与URL一起传递,这里我担心一些安全问题。我正在寻找一种在这里隐藏查询字符串参数的方法来解决这个问题 我知道参数的加密,目前我正在使用它。但是我想完全隐藏查询字符串参数。我不能在这里使用session/ViewBag,因为我不能在单击按钮时为每条记录设置会话值并在控制器中访问它 感谢您的帮助。提前谢谢。我的控制器和视图代码如下 看法 但是我想完全隐藏查询字符串参数 查询字符

我有一个Telerik网格,其中我使用客户机模板对每个记录进行编辑/删除操作。因此,对于编辑/删除操作,我需要将该记录的id与URL一起传递,这里我担心一些安全问题。我正在寻找一种在这里隐藏查询字符串参数的方法来解决这个问题

我知道参数的加密,目前我正在使用它。但是我想完全隐藏查询字符串参数。我不能在这里使用session/ViewBag,因为我不能在单击按钮时为每条记录设置会话值并在控制器中访问它

感谢您的帮助。提前谢谢。我的控制器和视图代码如下

看法 但是我想完全隐藏查询字符串参数

查询字符串参数是使用
GET
方法的HTTP标准的一部分,因为它们是URI的一部分

GET方法意味着检索任何信息(以 实体)由请求URI标识

请理解,默认情况下,GET方法在URI中发送可解析信息,例如:

http://www.mywebsite.com/person?id=1
                                ^--- one location that can be parsed is the querystring
因此,隐藏这意味着您需要更改发出请求的方式或更改请求类型

@Html.ActionLink(/* irrelevant parameters*/)
创建锚定标记,锚定标记的一部分是存储锚定标记的属性()。据我所知,没有默认的方法覆盖URI以不通过Querystring传递信息

POST方法用于请求源服务器接受包含在请求中的实体,作为由请求行中的请求URI标识的资源的新从属

这是一种奇特的说法,将信息发送到URI。但是,这一次,您可以使用Querystring或使用请求体(据我所知,GET不允许请求体)。正文可以包含几乎任何类型的mime类型,但通常是

因此,另一段代码是:

@Html.ActionLink("Add", "Create", "MyController", new { area = "", ID = ViewBag.MyDataID }, new { @class = "aMyClass" })
可能是:

@using(Html.BeginForm("Create", "MyController", FormMethod.Post))
{
  <input type="hidden" name="area" value="" />
  <input type="hidden" name="ID" value="@ViewBag.MyDataID" />
  <input type="submit" value="Add" />
}
@使用(Html.BeginForm(“创建”、“MyController”、FormMethod.Post))
{
}

根据您提出的问题,我强烈建议您在上阅读MVC。

我不知道如何使查询字符串完全不可见,但我可以让您无法访问它们

一般的想法是使用查询字符串创建至少两条指向url的路径。在您希望人们能够访问的路径中,创建一个中间方法,重定向到您希望返回视图的操作。第二条路径将直接访问我前面提到的操作。在中间方法中,您告诉数据库将“以前是否访问过此页面”的值增加到1


您可能需要花几个小时思考下一部分,然后才能了解为什么它99%的时间都能工作。在中间方法结束时,将值设置回0!在返回视图的操作中,将其设置为仅当值设置为0时才能返回要返回的视图!但是,在返回视图之前,请将值为1!但是,此方法不是100%安全的。我认为它是唯一只使用基础知识和很少代码的实现。观察并不会使查询字符串URL无法访问。它只会使人们更难访问网站。

您真的需要将其作为URL的一部分传递吗?您不能改为执行POST请求吗?我如何才能在此处使用POST请求?请查看我的控制器代码。我需要从“编辑操作”导航到另一个视图,然后用户提交更改,然后在其中使用POST请求保存更改。然后导航回网格。这是操作流程。通过模糊性实现的安全性根本不安全。与其隐藏它,不如e验证用户并检查他们是否具有查看或编辑员工的适当角色/权限。这样,任何人都可以看到Url,但没有人可以恶意使用它。谢谢你的回答Eric,是的,我明白你的意思,并且理解GET请求是如何工作的。但我来这里是想知道是否有办法处理此问题。在这里添加q问题之前,我做了很多研究。但是没有一个好的方法来处理我的问题。在这里,我对创建操作链接没有任何问题,但我的问题是编辑/删除/详细信息操作。请查看我的视图代码中的列定义。我如何处理这个问题。我不知道如何将其作为POST请求,因为它是在列定义中,我很困惑如何将锚定标记更改为表单并不是所有链接的解决方案。
@Html.ActionLink("Add", "Create", "MyController", new { area = "", ID = ViewBag.MyDataID }, new { @class = "aMyClass" })
@using(Html.BeginForm("Create", "MyController", FormMethod.Post))
{
  <input type="hidden" name="area" value="" />
  <input type="hidden" name="ID" value="@ViewBag.MyDataID" />
  <input type="submit" value="Add" />
}