Asp.net-Mvc

在 MVC 控制器建構子中獲取主機名

  • January 9, 2021

是否可以從控制器建構子中獲取目前主機名?

Request 和 HttpContext 對像都為 null,因此 Request.Url 什麼也沒有產生。

public class HomeController : Controller
{
   private readonly MyEntities _entities;

   public HomeController()
   {
       //
       var hostname = Request.Url;
       if (hostname.Contains("localhost")) EFConnectionStringName="localhost";
       else EFConnectionStringName="default";
       _entities = new MyEntities(EFConnectionStringName);
   }
...

我在這裡要解決的更大問題是根據主機名為實體框架選擇一個連接字元串。想法?

Request在建構控制器期間確實為空。試試這個:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
   var hostname = requestContext.HttpContext.Request.Url.Host;

   // do something based on 'hostname' value
   // ....

   base.Initialize(requestContext);
}

另外,請注意,它Request.Url不會返回主機名,而是一個Uri可以從中提取主機名的對象,使用Url.Host.

請參閱MSDN

嘗試這個:

public class HomeController : Controller
{
   protected override void OnActionExecuting(ActionExecutingContext filterContext)
   {
       base.OnActionExecuting(filterContext);
       Debug.Print("Host:" + Request.Url.Host); // Accessible here
       if (Request.Url.Host == "localhost")
       {
           // Do what you want for localhost
       }
   }
}

注意,這Request.Url是一個Uri對象,所以你應該檢查Request.Url.Host

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