任何人都可以告訴我是否有辦法讓我在Global.asax的Application_Start事件中獲取我的站點的域名?全球ASAX - 獲取服務器名稱
通常我只是從Context.Request.ServerVariables [「SERVER_NAME」]得到它,但這是不可用的。理想情況下,我也喜歡從啓動應用程序的請求中獲取URL。
嗯 - 從下面的答案,似乎IIS7在這裏有所作爲。這是新的,現在有設計準則,以嘗試和做它阻止你:
任何人都可以告訴我是否有辦法讓我在Global.asax的Application_Start事件中獲取我的站點的域名?全球ASAX - 獲取服務器名稱
通常我只是從Context.Request.ServerVariables [「SERVER_NAME」]得到它,但這是不可用的。理想情況下,我也喜歡從啓動應用程序的請求中獲取URL。
嗯 - 從下面的答案,似乎IIS7在這裏有所作爲。這是新的,現在有設計準則,以嘗試和做它阻止你:
您可以通過靜態HttpContext.Current成員訪問Context。
HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
HttpContext.Current.Request.Url;
編輯,根據你的一些意見,我做了一些額外的研究
這個錯誤是由於在IIS7集成管道,使得在Application_Start事件無法請求上下文中的設計更改。使用經典模式(在先前版本的IIS上運行時的唯一模式)時,儘管Application_Start事件一直被認爲是應用程序生命週期中的全局和請求不可知事件,但請求上下文過去常常可用。儘管如此,由於ASP.NET應用程序始終是通過對應用程序的第一個請求啓動的,因此通過靜態HttpContext.Current字段可以訪問請求上下文。
所以,你有兩個選擇
您的網絡應用程序可以在多個不同的域下運行。由於Application_Start
事件中沒有當前的請求,因此無法知道應用程序將在哪個域中調用。
然而,您可以使用System.Environment.MachineName
找出機器名稱。
在VB.NET,在Global.asax中,我使用以下命令:
Hosting.HostingEnvironment.ApplicationHost.GetSiteName
它對應於IIS應用程序的名稱。
更新:看來,方法「GetSiteName」不打算直接調用,它不適用於我在Visual Studio 2015中(或者也許是因爲我所做的框架版本更改)。 - HttpContext.Current是一個靜態成員
System.Web.Hosting.HostingEnvironment.SiteName
我不認爲這是在的Application_Start – Luk
@Luk一個的HttpContext:我通過替換它固定它。無論你在什麼範圍內都無所謂。它就在那裏。如果您遇到問題,請完全限定它System.Web.HttpContext.Current – Bob
如果我這樣做,我會得到一個運行時錯誤,指出該請求在此上下文中不可用。資質沒有任何區別。 – Paddy