我需要在返回视图之前对id进行编码。在url中传递时可以很容易地猜到id,所以我在View中返回之前尝试编码
[HttpGet]
public ActionResult Index(int id = 0)
{
var model = new ReviewModel();
if (id != 0)
{
model.Id = id;
model = model.Get();
//How can I encode model.Id here***
}
ViewBag.IsAdmin = model.IsAdmin(User.Identity.Name);
model.SaveAudit("Visits Code of Conduct", User.Identity.Name);
return View(model);
}
答案 0 :(得分:0)
考虑非整数标识符或手动加密/解密
因为它是一个整数,所以如果你想考虑将它存储在你的模型上,你尝试编码它的选项会相当有限。如果您能够存储某种类型的更多唯一标识符,例如Guid
,那么这可能更好,因为它会取出用户试图“猜测”或更改值的元素。
我想你可以根据你的整数值创建一些类型的哈希并传递它(你需要相应地更新你的值),然后解密请求POST
一侧的哈希值{{3 }}
可能临时存储使用
一个考虑因素可能是使用某种形式的临时存储(如TempData
)来存储该值,以便在后续请求中可用:
if (id != 0)
{
model.Id = id;
model = model.Get();
// Store the ID in TempData
TempData["CurrentReviewID"] = id;
}
然后,当你的下一个请求(大概是POST
触发了这个请求时,你可以从TempData
集合中读取你的值并使用它:
[HttpPost]
public ActionResult Index(ReviewModel model)
{
// Resolve your ID here
int int = Convert.ToInt32(TempData["CurrentReviewID"]);
// Continue as expected
}
这样的方法或 gulp Session
可用于在请求之间保留此类信息,但这可以为您的应用程序添加一个有状态元素,您通常希望避免在MVC应用程序中使用。