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吗?
非常感谢任何帮助。谢谢!
简短的回答:你不能得到它,因为网站没有一个单一的规范基础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();
}