首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以访问global.asax.cs中的虚拟目录名吗?

我可以访问global.asax.cs中的虚拟目录名吗?
EN

Stack Overflow用户
提问于 2009-04-28 20:42:13
回答 5查看 5.1K关注 0票数 7

属性HttpContext.Current.Request.ApplicationPath表示IIS或WebDev.WebServer中的虚拟目录。

代码语言:javascript
复制
 HttpContext.Current.Request.ApplicationPath evaluates to "/virtualdirectory"

这可以与VirtualPathUtility一起使用,以使路径根相对:

代码语言:javascript
复制
 VirtualPathUtility.ToAbsolute("~/images/cat.jpg",
                               HttpContext.Current.Request.ApplicationPath)

 // (this evaluates to "/virtualdirectory/images/cat.jpg")

在IIS6和WebDev.WebServer中,Request对象global.asax.cs中是可用的,但是IIS7抱怨说它“在当前上下文中不可用”。因此,上面的第二行代码可以工作,但在IIS7中不行。

问题是我需要访问global.asax.cs中的虚拟目录名。我需要它来构造一些在动态创建的CSS中使用的路径。是否有其他方法来访问此值?

编辑:--这是在IIS 7中调用Application_Start下的global.asax.cs中的HttpContext.Current.Request时遇到的错误:

代码语言:javascript
复制
 HttpException (0x80004005): Request is not available in this context]
    System.Web.HttpContext.get_Request() +8789264
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-03 05:02:08

终于找到了简单的答案!

代码语言:javascript
复制
 HttpRuntime.AppDomainAppVirtualPath

在Application_Start期间立即可用

这是表单/myapplication,包括/前缀。

票数 14
EN

Stack Overflow用户

发布于 2009-04-28 20:48:11

您能使用ResolveUrl(“~/映像/cat.jpg”)构建您的路径吗?

编辑: ResolveUrl是一种控制方法,而不仅仅是页面类,所以您可以这样做(可能有点难看):

代码语言:javascript
复制
System.Web.UI.Control c = new Control();
String s = c.ResolveUrl(@"~/images/cat.jpg");
票数 0
EN

Stack Overflow用户

发布于 2009-04-29 08:29:36

嗯..。我不知道IIS7的变化。我想知道把这个操作推迟到你有一页之后是否会更简单。例如,您可以尝试在Application_BeginRequestSession_Start中放置“仅限一次”的内容。

或(完全未经测试的)自订钩子:

代码语言:javascript
复制
    public override void Init() {
        base.Init();
        EventHandler handler = null;
        handler = delegate {
            // do stuff, once only
            this.BeginRequest -= handler;
        };
        this.BeginRequest += handler;
    }

诀窍是只做一次(如果多个请求同时到达);也许是一个静态的ctor?例如,我认为这只会触发一次,并且只有在上下文中有一个可用的页面时:

代码语言:javascript
复制
    static class DelayedLoader {
        static DelayedLoader() {
            string s = VirtualPathUtility.ToAbsolute("~/images/cat.jpg",
                           HttpContext.Current.Request.ApplicationPath);
        }
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static void Init() { }
    }
    public override void Init() {
        base.Init();
        EventHandler handler = null;
        handler = delegate {
            DelayedLoader.Init();
            this.BeginRequest -= handler;
        };
        this.BeginRequest += handler;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/799729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档