c# - 如何在 MVC 中跟踪以前的 Urls

标签 c# asp.net-mvc url

我有一个主页,其中有一些过滤器,当我返回到这个主 url 时,我想保留这些过滤器。但是在加载其他页面后我想返回。这可以通过获取 @Request.UrlReferrer 轻松完成。但是,它仅在返回上一页时有效,前 2 页我需要它。

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

所以如果我有 3 个级别:

  1. WebSite\page1?Filter=ABC
  2. 网站\page2
  3. 网站\page3

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

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

我怎样才能以更智能的方式做到这一点,而不是使用 session ?

最佳答案

当您逐页前进时,您应该递归地构建一个 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);

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

这可能会深入许多层次,但获取上一页 URL 的过程始终相同——只需解码 returnUrl 参数即可。

关于c# - 如何在 MVC 中跟踪以前的 Urls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30497496/

相关文章:

c# - Thinktecture Identity v2 滚动 session 安全 token

c# - 如何正确引发自定义事件?

c# - DateTime 或 int 到 IQueryable 中的字符串?

C# 从 Byte[512] 的末尾删除空值

c# - 为什么用 .net 代码更新 cshtml 文件时不需要编译?

asp.net-mvc - 获取文件夹中的文件

javascript - 来自 Url.Content 的不匹配 Url

angularjs - Web 应用 list : hash in start_url

iOS 和 XCode : What is the best way to store connection settings (i. URL)用于 iOS 应用程序?

http - URL 可以在 GET 请求中包含任意二进制数据吗?