Asp.net

全域 ASAX - 獲取伺服器名稱

  • November 24, 2009

誰能告訴我是否有辦法在 global.asax 的 Application_Start 事件中獲取我網站的域名?

通常我只是從 Context.Request.ServerVariables[“SERVER_NAME”] 中獲取它,但這不可用。理想情況下,我還想從啟動應用程序的請求中獲取 URL。


嗯 - 從下面的答案來看,似乎在 IIS7 上會有所不同。這是新的,現在有設計指南試圖阻止你這樣做:

IIS 部落格

您可以通過靜態HttpContext.Current成員訪問Context 。

HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
HttpContext.Current.Request.Url;

編輯,根據您的一些評論,我做了一些額外的研究

此錯誤是由於 IIS7 集成管道中的設計更改導致 Application_Start 事件中的請求上下文不可用。當使用經典模式(在以前版本的 IIS 上執行時的唯一模式)時,請求上下文過去是可用的,即使 Application_Start 事件一直旨在作為應用程序生命週期中的全域且與請求無關的事件。儘管如此,由於 ASP.NET 應用程序總是由應用程序的第一個請求啟動,因此過去可以通過靜態 HttpContext.Current 欄位訪問請求上下文。

所以你有兩個選擇

  1. 更改您的應用程式碼以不使用請求上下文(推薦)。
  2. 將應用程序移至經典模式(不推薦)。

<http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart/>

引用自:https://stackoverflow.com/questions/1790457