一点背景:
我们需要为客户端开发一个自定义Orchard模块,该模块将捕获外部URL引用者(如果有的话)并将其存储在会话变量中供以后使用,例如:提交其中一个产品的查询。
我天真的解决方案是建议我们在Session_Start上记录URL引用者,因为它是了解用户如何访问我们网站的可靠方式。问题是客户端不希望我们触及 global.asax.cs 文件。它必须通过自定义模块完成。这是不容谈判的。
所以我的问题是:当使用Orchard模块开始新会话时,如何可靠地检索和存储UrlReferrer信息?
或者,是否有其他方法可以挂钩页面生命周期,也可以检查上一页是否是外部推荐人?
我最关心的是我需要知道是否有人点击了赞助商链接,我需要在模块中找到它,而不是global.asax.cs。我没有对任何特定的跟踪方法设置死亡,只要在Orchard框架中有可能给出我的限制。
仅供参考:Orchard版本为1.8 +
答案 0 :(得分:3)
您可以通过过滤器执行此操作。我之前在我的商务模块中实现了此功能,通常可以为合作伙伴网站的转化提供折扣或归因。您可以在此处查看我的过滤器的源代码:https://github.com/bleroy/Nwazet.Commerce/blob/master/Filters/ReferrerFilter.cs
答案 1 :(得分:2)
我要做的是创建一个自定义模块,并在那里有一个自定义控制器:
public class ReferrerController : Controller {
public ActionResult Index(string referrer) {
if (Session["Referrer"] != null) {
// do nothing, already used as entry point in the current session
} else {
// handle referrer, probably also some timestamp or hash
Session["Referrer"] = referrer; // save in session
}
return RedirectToRoute("~/"); // redirect to home
}
}
显然,也为此创建了一条路线。然后从外部引用者转到将要处理引荐人的路线。 (http://example.com/referrer?referrer=somereferrer)