C# IIS 7 基本 URL

标签 c# iis-7 appcmd

最近我问了这个:

Get Base URL of My Web Application

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

然后我创建了一个安装程序,该安装程序将指向 IIS 7。

我有:

    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.Application”是一种“类型”,但使用方式类似于“变量”

我想要的只是 IIS 7 的基本 URL。

我无法使用目录条目,因为我不支持 IIS 6。

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

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

最佳答案

简短的回答:你无法得到它,因为网站没有单一规范的基本 URI - 网站(或者更确切地说,Web 应用程序)可以配置为响应任何绑定(bind)、任何域名的请求,以及任何资源路径 - 并且可以在主机 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();
}

关于C# IIS 7 基本 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15942641/

相关文章:

asp.net - HTTP 403 禁止 : Access is denied ASP. NET Web API

iis - 如何使启动任务幂等?

powershell - 通过命令行回收 IIS 中的所有应用程序池

C# 培训测验

c# - 识别行计数程序中的 C# 或 C++ 函数开始

visual-studio - 为 IIS 使用 Web 部署工具 - 使用管理员帐户,但不适用于 IIS 或 Windows 用户帐户

c# - 如何根据 MVC 网站的子域更改 EF 连接字符串?

iis - 我可以使用 PowerShell 而不是 AppCmd.exe 来监视 IIS 状态吗?

c# - 使用 WebSocketClient ReceiveAsync 和缓冲区的正确方法是什么?

c# - 如何使用 NEST QueryString 并转义特殊字符?