Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc HTTP主机头作为路由值_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

Asp.net mvc HTTP主机头作为路由值

Asp.net mvc HTTP主机头作为路由值,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我试图从同一个代码库为多个虚拟主机提供服务。我的一个想法是将HTTP主机头作为路由值传递,因为由于单元可测试性,我不想在控制器中依赖HttpContext 我曾计划在控制器基类或类似的东西中公开这个路由值。我尝试将传递作为路线值,如下所示: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { host = HttpContext.Cur

我试图从同一个代码库为多个虚拟主机提供服务。我的一个想法是将HTTP主机头作为路由值传递,因为由于单元可测试性,我不想在控制器中依赖HttpContext

我曾计划在控制器基类或类似的东西中公开这个路由值。我尝试将传递作为路线值,如下所示:

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { host = HttpContext.Current.Request.Url.Host, controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
这将产生一个HttpException:请求在此上下文中不可用


如果您对更好的方法有任何想法或建议,我们将不胜感激。

在测试控制器时,您可以根据上下文进行测试。路由系统的设计考虑到了可测试性,因此您可以设置一个模拟上下文,在测试运行时提供正确的URL


代码无法工作的原因是,您可能正在从全局
应用程序\u Start
事件调用它,该事件发生在第一个请求传入之前。这意味着HttpContext对象此时不可用。

请尝试按如下方式修改您的
HomeController

public ActionResult Index() {
    var request = HttpContext.Request.Url;

    if (request != null && request.AbsoluteUri.Contains("domain.com")) {
        //take the desired action and redirect here
    }

    //the rest of home controller logic
}

应用程序启动时请求不可用完全有道理。谢谢