我有几个这样的控制器:
[RoutePrefix("side-navigation")]
public class SideNavigationController : BaseController
{
[Route("{pathname}")]
public ActionResult Index(string pathname)
{
SideNavigationPopoutModel model = _sideNavFactory.Value.CreatePopout(pathname);
if (model != null)
{
return View(model);
}
return HttpNotFound();
}
}
public class CatchAllController : BaseController
{
public ActionResult Index(string pathname)
{
CatchAllModel model = _catchAllModelFactory.Value.Create(pathname);
if (model != null)
{
// TODO: Do we need this - what does it do?
// TempData.Restore(this);
return View(model);
}
return HttpNotFound();
}
}
但是我似乎无法在侧面导航控制器中进行索引操作-如果我浏览至localhost/side-navigation/test
,它将以side-navigation/test
作为路径名来捕获所有控制器,而不是侧面导航控制器test
作为路径名。
任何人都可以在这里看到我做错了什么,或者如何使侧面导航控制器正常工作?
这是路由配置:
// MVC attribute routing
routes.MapMvcAttributeRoutes();
// Default catch all route
routes.MapRoute(
"Default",
"{*pathname}",
new { controller = "CatchAll", action = "Index" });
奇怪的是,如果我将侧边导航索引的路线更改为test/{pathname}
并浏览到side-navigation/test/test
,它将正常工作并且控制器将被命中,但是我不想在路径名之前添加任何内容
答案 0 :(得分:0)
似乎您没有使用[Area],也将属性[Route(“ [action]”)]置于方法上方。
答案 1 :(得分:0)
好,我通过在路径名之前添加星号来解决此问题:
[RoutePrefix("side-navigation")]
public class SideNavigationController : BaseController
{
[Route("{*pathname}")]
public ActionResult Index(string pathname)
{
}
}
如果任何人都可以解释为什么这种方法有效并且没有星号的话,那将不胜感激,因为我还以与不需要星号完全相同的方式设置了产品控制器
答案 2 :(得分:-3)
[RoutePrefix(“侧面导航”)] 公共类SideNavigationController:BaseController { [Route(“ {* pathname}”)] 公共ActionResult索引(字符串路径名) { } }