最近我问了这个:
Get Base URL of My Web Application
这在调试中起到了一定的作用,因为我使用 VS 开发服务器。
然后我创建了一个安装程序,该安装程序将指向 IIS 7。
我有:
void Application_Start(object sender, EventArgs e)
{
_baseUrl = HttpContext.Current.Request.Url.ToString();
....
}
但这引发了以下错误:
请求在此上下文中不可用
然后我做了一些阅读,这就是发生这种情况的原因:
然后,我使用上述技术将代码从 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/