我有三个控制器,Home
,Blog
和Misc
。
当我在地址栏中输入mydomain.com/Home
时,浏览器会显示家庭控制器的视图。
当我在地址栏中输入mydomain.com/Blog
时,浏览器会显示博客控制器的视图。
当我输入mydomain.com/anything
(不是Home
或Blog
)时,浏览器会显示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 = "" },
;
答案 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启动中注册此控制器工厂。