如何在MVC中跟踪以前的Urls

Rog*_*ira 6 c# url asp.net-mvc

我有一个主页面,当我返回到这个主URL时,我想保留一些过滤器.但在加载另一页后我想回去.通过获得它可以轻松完成@Request.UrlReferrer.但是,它仅在返回上一页时有效,我需要前两页.

我可以通过使用Session["ReturnToMainUrl"] = Request.UrlReferrer但只在离开第一页时设置它.

所以,如果我有3个级别:

  1. 网页\第1页?过滤= ABC
  2. 网页\第2页
  3. 网站\第3页

  4. 我现在在第2页或第3页,我想回到Website\page1?Filter = ABC

当我在第3页时,我可以使用Request.UrlReferrer返回到第2页,但是当我返回到第1页时,我需要保留参数,以便我从会话中加载.

我怎样才能以更智能的方式实现,而不是使用会话?

ksp*_*rin 2

returnUrl当您从一个页面前进到另一个页面时,您应该递归地构建查询字符串参数。

例如:https: //dotnetfiddle.net/HtoX6b

var page0 = new Uri("http://www.example.com/page0");
Console.WriteLine("Page 0: {0}", page0);

var page1 = new Uri("http://www.example.com/page1?paramA=foo&paramB=bar&returnUrl=" + HttpUtility.UrlEncode(page0.ToString()));
Console.WriteLine("Page 1: {0}", page1);

var page2 = new Uri("http://www.example.com/page2?paramC=baz&paramD=qux&returnUrl=" + HttpUtility.UrlEncode(page1.ToString()));
Console.WriteLine("Page 2: {0}", page2);


var page2ReturnUrl = HttpUtility.ParseQueryString(page2.Query)["returnUrl"];
Console.WriteLine("Return to page 1 from page 2: {0}", page2ReturnUrl);

var page1ReturnUrl = HttpUtility.ParseQueryString(page1.Query)["returnUrl"];
Console.WriteLine("Return to page 0 from page 1 : {0}", page1ReturnUrl);
Run Code Online (Sandbox Code Playgroud)
Page 0: http://www.example.com/page0
Page 1: http://www.example.com/page1?paramA=foo&paramB=bar&returnUrl=http:%2f%2fwww.example.com%2fpage0
Page 2: http://www.example.com/page2?paramC=baz&paramD=qux&returnUrl=http:%2f%2fwww.example.com%2fpage1%3fparamA%3dfoo%26paramB%3dbar%26returnUrl%3dhttp:%252f%252fwww.example.com%252fpage0

Return to page 1 from page 2: http://www.example.com/page1?paramA=foo&paramB=bar&returnUrl=http:%2f%2fwww.example.com%2fpage0
Return to page 0 from page 1 : http://www.example.com/page0
Run Code Online (Sandbox Code Playgroud)

这可能会持续很多深度,但派生前一页 URL 的过程始终相同 - 只需对参数进行解码即可returnUrl