MVC - 将变量存储到下一个请求

MVC - Store variable to next request

我有一种方法接收两个参数(int?,string)。我的控制器中的操作必须保存此变量和 return 带有表单的视图。从客户端 return 编辑表单后,我需要来自先前请求的变量。我可以将它们传递给 ViewBag 查看并以隐藏形式添加到表单,但这非常危险,任何人都可以在浏览器中更改它。有什么想法吗?

我觉得这个问题没有意义。 如果我有使用 HTTP GET 方法接收两个参数的方法,那么用户在 get 方法或表单中更改这两个变量没有区别。 如果我把它存储在服务器端,他可以在将参数传递给第一个方法时更改,服务器将存储错误的变量。
例如:
http://www.someurl.com/Controller/Action/?id=123&key=someKey
我可以更改通过编辑 url 参数,因此荒谬地将其作为变量存储在服务器端,以确保用户不会通过编辑隐藏字段来更改它。此外,我可以检查密钥是否与具有此 ID 的数据库中的密钥相同。

您可以在用户的​​当前session中存储任何您喜欢的object。在您的控制器中,您可以使用:

// Save value to session
Session["MyVariableName"] = 32;

// Read value from session
int myVariable = (int)Session["MyVariableName"];

有关 session 的更多信息,请参阅:https://msdn.microsoft.com/de-de/library/system.web.httpcontext.session(v=vs.110).aspx

Session time is 20 or 30 minutes. User can open this form and submit it when the time of session is out. Users don't like exceptions

允许表单在一定时间后过期是很标准的做法。您可以让会话永远打开,因为这是一个安全漏洞。

至于实际值,您可以在处理完第二页后立即将其从会话中删除。如果点击第二页时该值不存在,只需再次重定向到第一页并显示一条消息,说明花费的时间太长。

您的第二个选择是使用 TempData 专门用于在两页之间存储值。 TempData 用户无法访问。

第三个选项当然是将值存储在数据库中(只要你想保留它,在登录之间等)