如何MapRoute?如果http://abc.com/Home转到Home Controller,请转到Misc Controller

时间:2010-10-19 04:24:42

标签: asp.net-mvc-routing

我有三个控制器,HomeBlogMisc

当我在地址栏中输入mydomain.com/Home时,浏览器会显示家庭控制器的视图。

当我在地址栏中输入mydomain.com/Blog时,浏览器会显示博客控制器的视图。

当我输入mydomain.com/anything(不是HomeBlog)时,浏览器会显示misc控制器的视图。

如何映射上面的路线?

我的意思是当键入除/ Home或/ Blog之外的其他内容 例如/ Test,/ Book,/ Book / Index,/ xxx / yyy / zzz / aaa,/ etc / etc / etc,
然后我的Misc控制器将启动

routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);


routes.MapRoute(
     "Misc",
     "{*id}",
      new { controller = "Misc", action = "Index", id = "" },
;

1 个答案:

答案 0 :(得分:0)

为了捕获“其他”条目,您需要覆盖确定使用哪个控制器的控制器工厂:

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
    try
    {
        return base.GetControllerInstance(requestContext, controllerType);
    }

    catch (HttpException ex)
    {
        int httpCode = ex.GetHttpCode();
        if(httpCode == (int)HttpStatusCode.NotFound)
        {
            IController controller = new MiscController();
            ((MiscController)controller).DefaultAction(); // whatever action you want to invoke
            return controller;
        }
        else
        {
            throw ex;
        }
    }
}

然后在Global.asax启动中注册此控制器工厂。