我有一个网站,为了正常工作,需要在其所有 URL 上附加一个 XML 文件,假设该文件名为module-1.xml
.
为了保持这些 URls 的干净,我编写了一个 IHttpModule,它使用HttpContext.Current.RewritePath
来完成事件内部的附加工作OnBeginRequest
。
IHttpModule 看起来很简单并且可以工作:
public void OnBeginRequest(Object s, EventArgs e)
{
string url = HttpContext.Current.Request.Url.AbsolutePath;
if (url.EndsWith(".aspx"))
HttpContext.Current.RewritePath(url + "?module-1.xml");
}
现在,我想使用 session 变量来检测用户何时决定将网站从 切换model-1.xml
到model-2.xml
并将我的代码更改如下:
public void OnBeginRequest(Object s, EventArgs e)
{
string url = HttpContext.Current.Request.Url.AbsolutePath;
if (url.EndsWith(".aspx"))
{
if (HttpContext.Current.Session["CurrentMode"] == "1")
HttpContext.Current.RewritePath(url + "?module-1.xml");
else if(HttpContext.Current.Session["CurrentMode"] == "2")
HttpContext.Current.RewritePath(url + "?module-2.xml");
}
}
根据我的发现,可以在模块内部访问会话,但不能从OnBeginRequest
事件内部访问,这是唯一HttpContext.Current.RewritePath
可以使其起作用的事件(至少从我一直在做的所有测试中)。
我的假设正确吗?如果是,我可以使用什么替代方案?创建自定义会话变量?我应该从 txt 文件还是从数据库中读取以了解用户正在查看的模块?我如何从模块内跟踪用户?