如何在 global.asax 的 Application_Start 方法中获得虚拟目录名

Yanbin_Q 2010-05-26 03:36:44
我现在只能在 global.asax 中的 Application_BeginRequest 方法中用 Request.ApplicationPath 获得应用的虚拟目录名,但这个方法是每次请求都会触发的,所以必须人为去判断只在第一次请求时取到该值。

如果能在 Application_BeginRequest 中获得虚拟目录名就好,因为它只在应用起动的时候执行一次,而且按理,在 Application_BeginRequest 执行的时候,虚拟目录名是确定的,用不着等到 Request 时来取。但是在 Application_BeginRequest 是还没有 Request 对象的。

有别的办法在 Application_BeginRequest 取得虚拟目录名吗?
...全文
245 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
缪军 2010-05-27
  • 打赏
  • 举报
回复
如果我说错了,请大家拍砖,我一定虚心接受
缪军 2010-05-27
  • 打赏
  • 举报
回复
好好想想吧,你们这些牛人给CSDN的我们这些仰望你们的菜鸟们树立了什么样的榜样:

一个是随便就能搜到的问题拿来提问,
另一个极端不负责任的回答问题


心寒


缪军 2010-05-27
  • 打赏
  • 举报
回复
晕,这样的牛人(排名639)来问这么简单的问题,
而且又来个牛人(排名6)答非所问!不仅如此,对楼主的错误推测也视而不见!!

让我这个菜鸟来回答楼主吧:
1、楼主应该分清楚Request可以是Page.Request,也可以是HttpContext.Request
2、在global中仍然可以使用
System.Web.HttpContext.Current.Request.ApplicationPath
得到虚拟路径的根;
3、Application_BeginRequest在执行次数不一定是一次,绝大多数情况是N次.
缪军 2010-05-27
  • 打赏
  • 举报
回复
我只是一个最菜的菜鸟,说的不一定对,楼主别往心里去
Yanbin_Q 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 microtry 的回复:]

晕,这样的牛人(排名639)来问这么简单的问题,
而且又来个牛人(排名6)答非所问!不仅如此,对楼主的错误推测也视而不见!!

让我这个菜鸟来回答楼主吧:
1、楼主应该分清楚Request可以是Page.Request,也可以是HttpContext.Request
2、在global中仍然可以使用
System.Web.HttpContext.Current.Request.App……
[/Quote]

它们都是 HttpRequest 实例,其实是一致的,它们都是由客户请求发起的。这一点与自启动的 Servlet 不一样。

Application_Start 方法并不会在 IIS 重启或应用重启之后马上执行,而是会在接入第一个客户请求才执行一次,所以也是存在 HttpRequest 的。

突然发现问的问题有个地方复制,粘贴错了。Application_Start

如果能在 Application_BeginRequest 中获得虚拟目录名就好
应该是
如果能在 Application_Start 中获得虚拟目录名就好

所以让二楼误解了。
乐居猫 2010-05-27
  • 打赏
  • 举报
回复
侧重点不一样 问什么问题都是可以理解的
Yanbin_Q 2010-05-27
  • 打赏
  • 举报
回复
以后要换个号来问问题了,以前是一直做 Java,才转入 .Net 的,所以会碰到不少实际的问题。

谢谢楼上各位,而且也请放心,问之前肯定是用 google 搜索过,没找到想要的答案才会来问这里更牛的人。
修改一下昵称 2010-05-27
  • 打赏
  • 举报
回复
崇拜一下楼上的。
孟子E章 2010-05-27
  • 打赏
  • 举报
回复
HttpRuntime.AppDomainAppVirtualPath
就可以了,如果是网站,返回的是/
如果是虚拟目录方式的,返回的是/虚拟目录名字
你去掉/就可以了

void Application_Start(object sender, EventArgs e)
{
System.IO.StreamWriter s = new System.IO.StreamWriter(Server.MapPath("~/xx.txt"));
s.WriteLine(HttpRuntime.AppDomainAppVirtualPath);
s.Close();
}
wuyq11 2010-05-26
  • 打赏
  • 举报
回复
private void Application_BeginRequest(object source, EventArgs e)
{
HttpContext context = ((HttpApplication)source).Context;
string ipAddress = context.Request.UserHostAddress;
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧