0

If someone goes to our website with a query string key of ref (for example mysite.com/AboutUs?ref=Test), is it possible to maintain that query string on all future links/form posts?

So for example, I may have a link on our website to go to mysite.com/Products. I would want this to be translated into mysite.com/Products?ref=Test.

Ideally I want to know if this is possible to do by inspecting the previous URL and adding it to the current URL when the request for the page is made, maybe by intercepting the route and appending the key (if it doesn't exist already).

The project is an MVC 4 application.

4

2 回答 2

4

实际上,您可以通过将其添加到每个 URL 来传递它,但这需要手动添加到Html.ActionLink等的每次使用中(或者我想您可以创建一个自定义 HTML Helper 来为您执行此操作,但是每个工作的开发人员在您的项目中需要记住始终使用自定义帮助程序),以及控制器操作中的所有重定向等。总而言之,这将非常耗时且非常脆弱。

您最好的选择是简单地使用查询字符串参数拦截初始请求,然后设置会话变量。然后,您可以简单地检查是否存在会话 var 而不是查询字符串参数。

要处理所有这些逻辑,最好的办法是创建一个全局操作过滤器。MSDN 上有关于过滤器的大量文档。创建过滤器后,您只需在 FilterConfig.cs(在 App_Start 中)注册它以使其成为全局。

于 2013-04-10T12:48:07.057 回答
1

在 cookie 中设置 URL 参数,然后在您的代码中根据 cookie 或 URL 中是否存在该值执行您想做的任何事情。

if(parameter set in cookie OR URL)
    // do stuff
if(parameter set in URL)
    // set the cookie so that future actions are also tagged with that parameter

或者,如果您希望仅对会话进行此类标记,请设置会话变量。

按照您建议的方式进行 - 您可以根据此标签重写页面上的所有链接,但这将是一种迂回且昂贵的方式。大多数语言都允许一个钩子,允许您的代码在将 HTML 输出发送到浏览器之前对其进行处理;只需运行适当的正则表达式搜索和替换即可获得您想要的。例如,PHP 具有 ob 缓冲和相关功能。您可以使用 .Net 的等价物。

于 2013-04-10T12:32:18.523 回答