如何在所有请求中维护特定的查询字符串



如果有人访问我们的网站时查询字符串键为ref(例如mysite.com/AboutUs?ref=Test(,是否可以在未来的所有链接/表单帖子中维护该查询字符串?

例如,我可能在我们的网站上有一个链接,可以访问mysite.com/Products。我想把它翻译成mysite.com/Products吗?ref=测试。

理想情况下,我想知道这是否可以通过检查以前的URL并在请求页面时将其添加到当前URL来实现,也许可以通过拦截路由并附加密钥(如果它还不存在(。

该项目是一个MVC 4应用程序。

实际上,您可以通过将其添加到每个URL来传递它,但这需要手动添加到Html.ActionLink的每次使用中,等等(或者我想您可以创建一个自定义的HTML Helper来为您做这件事,但每一个在您的项目中工作的开发人员都需要记住始终使用自定义的Helper(,以及控制器操作中的所有重定向等。无论长短,这都是非常耗时和脆弱的。

您最好的选择是简单地使用querystring参数截取初始请求,然后设置会话var。然后,您可以简单地检查会话var而不是querystring参数的存在。

要处理所有这些逻辑,最好的办法是创建一个全局操作过滤器。MSDN上有很多关于过滤器的文档。创建过滤器后,只需在FilterConfig.cs(在App_Start中(中注册即可使其全局化。

在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输出发送到浏览器之前对其进行处理;只需运行适当的regex搜索并替换即可获得所需内容。例如,PHP具有ob缓冲和相关功能。您可以对.Net使用等效的

相关内容

  • 没有找到相关文章

最新更新