如何在asp.net mvc中的ActionResult中对url中的id进行编码

时间:2016-05-12 13:17:00

标签: c# asp.net asp.net-mvc razor

我需要在返回视图之前对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);
    }

1 个答案:

答案 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应用程序中使用。