最后的操作/ Url查找器ASP.NET MVC 5

时间:2014-12-23 09:59:30

标签: c# asp.net asp.net-mvc asp.net-mvc-routing actionmethod

好的,首先我想说我不知道​​我在做什么。

我的MVC项目中有几个页面经常会从另一个页面中受到攻击。例如,我的某个模型的编辑页面可以来自详细信息页面或Crud Index页面上的管理链接。完成编辑后,我想将用户送回正确的位置。考虑到我不理解Identity returnUrl的东西,我编写了自己的方法来创建两个cookie,最终我可能不需要两个,但是现在我有两个,这样我就可以监视它们在Chrome F12工具中更新并确保每个时间我在Controller Action中使用这个方法它正在做正确的事情。我也想说我也没有对此进行任何测试。我的测试是反复试验和Chrome F12。

以下是代码:

private void LastActionHero()
{
    string lastUrl = null;
    var currentUrl = Request.Url.LocalPath;

    if (Request.Cookies["currentUrl"] != null)
    {
        lastUrl = Request.Cookies["currentUrl"].Value;
    }

    if (lastUrl != currentUrl)
    {
        var current = new HttpCookie("currentUrl", currentUrl)
                      {Expires = DateTime.Now.AddDays(1)};
        Response.Cookies.Set(current);
        var previous = new HttpCookie("lastUrl", lastUrl)
                       { Expires = DateTime.Now.AddDays(1) };
        Response.Cookies.Set(previous);
    }
}

问题: 有没有更好的方法来做到这一点,这样安全吗?该网站的一部分不在登录后面。那有关系吗?

您对我应该如何实现这一点有任何想法吗?

我还在研究如何使用它。

以下是Cookie的屏幕截图,它们似乎工作正常我在使用该方法的3或4个操作中来回多次,这里显示了正确的最后2个网址:

enter image description here

1 个答案:

答案 0 :(得分:1)

只要同一会话中的用户一次只打开一个页面,您的“cookie方法”就会起作用。如果用户输入这样的页面,例如在一个标签中,然后在从另一个标签离开那个标签之前它将不再起作用。

此问题的一个解决方案是向该页面提供“return-url”。因此,您可以调用/Edit/1之类的/Edit/1?returnUrl=CurrentUrl来代替{{1}},然后在编辑页面上使用该参数,以便在编辑完成后返回正确的页面。