全球ASAX – 获取服务器名称
任何人都可以告诉我是否有办法让我在Global.asax的Application_Start事件中获取我的站点的域名?
通常我只是从Context.Request.ServerVariables [“SERVER_NAME”]得到它,但是这是不可用的。 理想情况下,我也喜欢从启动应用程序的请求中获取URL。
嗯 – 从下面的答案,这似乎是IIS7在这里有所作为。 这是新的,现在有devise准则,试图阻止你这样做:
IIS博客
你可以通过静态的HttpContext.Current成员来访问Context 。
HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; HttpContext.Current.Request.Url;
编辑,基于您的一些意见,我做了一些额外的研究
此错误是由于IIS7集成pipe道中的devise更改导致Application_Start事件中的请求上下文不可用。 在使用经典模式(在以前版本的IIS上运行时,唯一的模式)时,尽pipeApplication_Start事件一直被认为是应用程序生命周期中的全局和请求不可知事件,但是请求上下文过去是可用的。 尽pipe如此,由于ASP.NET应用程序始终是通过对应用程序的第一次请求启动的,因此通过静态HttpContext.Current字段可以获得请求上下文。
所以你有两个select
- 将您的应用程序代码更改为不使用请求上下文(推荐)。
- 将应用程序移至经典模式(不推荐)。
您的networking应用程序可以在多个不同的域下运行。 由于Application_Start
事件中没有当前的请求,因此无法知道应用程序将在哪个域中调用。
但是,您可以使用System.Environment.MachineName
find机器名称。
我猜你是在IIS 7上? 因为HttpContext在IIS 6.0上可用。
你可以考虑稍后填写这些信息吗? 例如第一次调用Application_BeginRequest
?
在VB.NET中,在Global.asax中,我使用以下内容:
Hosting.HostingEnvironment.ApplicationHost.GetSiteName
它对应于IIS中的应用程序名称。
更新:似乎“GetSiteName”的方法不打算直接调用,它不适用于我在Visual Studio 2015年(或者也许是因为我所做的框架版本更改)。 我通过replace它来修复它:
System.Web.Hosting.HostingEnvironment.SiteName
你有没有访问请求对象? 如果是这样,我认为你可以使用Request.Url.Authority
它将返回你正在寻找的DNS主机名称。
G
你有没有尝试过: –
System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"]
谢谢,
菲尔。