在MVC控制器构造函数中获取主机名

Ben*_*wer 13 asp.net-mvc entity-framework

是否可以从控制器构造函数中获取当前主机名?

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);
    }
...
Run Code Online (Sandbox Code Playgroud)

我在这里要解决的更大问题是根据主机名为Entity Framework选择连接字符串.想法?

hai*_*770 17

Request构建 Controller时确实为null .试试这个:

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);
}
Run Code Online (Sandbox Code Playgroud)

此外,请注意,Request.Url不会返回主机名,而是返回一个Uri可以从中提取主机名的对象Url.Host.

请参阅MSDN.

  • 这在 ASP.NET 5 预览版中不再可能了吗? (2认同)

oxf*_*xfn 7

试试这个:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意,这Request.Url是一个Uri对象,所以你应该检查Request.Url.Host