C# IIS 7 Base Url

本文关键字:Url Base IIS | 更新日期: 2023-09-27 18:08:48

最近我问了这个问题:

获取我的Web应用程序的基础URL

这在调试中起到了一定的作用,因为我使用的是VS Development服务器。

然后生成了Install,安装将指向IIS 7。

I had:

    void Application_Start(object sender, EventArgs e)
    {
        _baseUrl = HttpContext.Current.Request.Url.ToString();
        ....
    }

但是这抛出了以下错误:

请求在此上下文中不可用

然后我做了一些阅读,下面是发生这种情况的原因:

http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart

然后我将代码从Application_Start移到Application_BeginRequest,使用上面的技术,因为我发现Application_BeginRequest被执行了几次。

但问题是我需要IIS 7的基本URL,在Application_Start中使用,所以我有一个全局字符串,我试图设置:

FirstRequestInitialization.Initialize(context);

但不奇怪的是,当尝试这个:

Application["BaseUrl"] = HttpContext.Current.Request.Url.ToString();

我得到这个错误: Microsoft.Web.Administration。应用程序'是一个'类型',但像'变量'一样使用

所有我想要的是IIS 7的基础URL

我不能使用目录项,因为我不支持IIS 6。

我该怎么做?有解决方法吗?我可以从VS执行apppcmd吗?

非常感谢任何帮助。谢谢!

C# IIS 7 Base Url

简短的回答:你不能得到它,因为网站没有一个单一的规范基础URI——一个网站(或者更确切地说,一个web应用程序)可以被配置为回答任何绑定、任何域名和任何资源路径上的请求——一个网站可以在主机web服务器(IIS)中重新配置,而应用程序根本不知道这一点。

如果你真的想要存储你的"基础URL"(即使这样的事情并不真正存在),那么你可以在Application_BeginRequest中这样做:

private static readonly Object _arbitraryUrlLock = new Object();
private static volatile String _arbitraryUrl;
public void Application_BeginRequest() {
    if( _arbitraryUrl == null ) 
        lock( _arbitraryUrlLock )
            if( _arbitraryUrl == null ) 
                _arbitraryUrl = HttpContext.Current.Request.Url.ToString();
}