如何停止出现在URL中的模型数据

时间:2012-03-22 03:06:37

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

如何在不将模型数据显示在网址中的情况下将视图模型传递给视图?

public ActionResult MyView(MyModel model)
{
    model.memberId = "Secret Id"
    return View("MyView", model)
}

网址显示为

http://localhost:1234/MyView?memberId=Secret Id

数据并非严重保密,但将其显示在URL中并不是真的可以接受。

2 个答案:

答案 0 :(得分:1)

我不知道你在做什么,你不应该在一个视图模型中设置任何秘密 - 因为视图模型就像名字所示......

但是要回答你的问题:为了避免在网址中出现memberId,你可以通过邮寄方式提交表单 - 但这当然也不安全。

例如,您最好将其存储在会话中。

答案 1 :(得分:0)

如前所述,视图模型正是您的视图模型。您永远不应该在视图模型中存储任何不应以一种形状或形式向客户端公开的数据(无论是隐藏的表单值,URL的一部分还是在ajax调用中)。

如果您确实需要保密数据,并且希望在操作之间传递数据,请使用TempData或ASPNet会话。这样,它就无处可靠。

我编写了一个CAPTCHA生成器,它使用TempData存储实际的CAPTCHA字符串,因为将其发送到客户端意味着任何自动化系统都能够读取字符串。我建议在会话中使用TempData,因为它只持有一个请求 - 而会话需要自己管理。

TempData["MyDataIdentifier"] = "MyObjectOrValue";