【发布时间】:2013-10-17 12:13:49
【问题描述】:
目前我有两个控制器操作:一个基于唯一标识符显示强类型视图,另一个更改模型。下面是一些代码来可视化我的意思:
[HttpGet]
[ActionName("Edit")]
public ActionResult UpdateDevice(string code)
{
// Request the device based on the code.
var device = GetDeviceModel(code);
// Present the device in a view.
return View(device);
}
[HttpPost]
[ActionName("Edit")]
public ActionResult UpdateDevice(DeviceModel model)
{
}
代码标识设备,但也可以更改它。这就是我的问题:在 post 方法中,我可以使用 model.Code 访问 new 代码,但我还需要知道 old 代码才能更改它.
我尝试了几种替代方案,但没有一个能满足我的要求:
-
ViewData在发布之前不会被保留。 -
TempData基于 Sessions 或 Cookies - 目前我都不想使用它们。 - 隐藏字段和模型绑定不是一个选项,因为它们可以在客户端进行操作。
最后我尝试从查询字符串中请求数据,如下所示:
[HttpPost]
[ActionName("Edit")]
public ActionResult UpdateDevice(DeviceModel model)
{
var oldCode = Request.QueryString["code"];
}
这行得通!但是我没有在网上找到任何关于此的资源。所以我的问题是:在 post 操作中使用查询字符串是否可以防止修改?什么(如果有的话)条件是这样的?
如果这不是“记住”代码的有效方式,是否有其他替代方法?
【问题讨论】:
-
不,修改不安全。
-
查询字符串不是一个安全的选项。
标签: c# asp.net-mvc http http-post query-string