asp.net MVC 默认操作在区域中不起作用
asp.net MVC default action not working in area
我有一个项目,其中声明了一个设置区域和一个 URL,只要我明确包含“/Index”操作,它就可以工作。问题是当我使用 RedirectToAction("Index") 时,它从 URL 中排除了“/Index”,我得到了 404 页面未找到。 URL 是:
http://localhost:40078/Setup/Facility/Index
- 作品
http://localhost:40078/Setup/Facility/
- 404(有或没有尾随 /)
路由配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
AreaRegistration.RegisterAllAreas();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "T.C.MVCWeb.Controllers" }
);
}
设置区域注册:
public class SetupAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Setup";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Setup_default",
"Setup/{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "T.C.MVCWeb.Areas.Setup.Controllers" }
);
}
}
请求控制器
namespace T.C.MVCWeb.Areas.Setup.Controllers
{
public class FacilityController : Controller
{
// GET: FacilitySetup
public ActionResult Index()
{
...
}
}
}
我添加了 Phil Haack 的 RouteDebugger,可以看到 404 请求认为 "Setup" 是控制器,但我不明白为什么,其余的输出让我感到困惑而不是帮助。
感谢 NightOwn888 的评论,我找到了一条通过属性声明的路由。有问题的路由属性声明了 Setup/{action},旨在允许区域 URL 本身 http://localhost:40078/Setup/ 映射到 SetupController。
我有一个项目,其中声明了一个设置区域和一个 URL,只要我明确包含“/Index”操作,它就可以工作。问题是当我使用 RedirectToAction("Index") 时,它从 URL 中排除了“/Index”,我得到了 404 页面未找到。 URL 是:
http://localhost:40078/Setup/Facility/Index
- 作品
http://localhost:40078/Setup/Facility/
- 404(有或没有尾随 /)
路由配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
AreaRegistration.RegisterAllAreas();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "T.C.MVCWeb.Controllers" }
);
}
设置区域注册:
public class SetupAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Setup";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Setup_default",
"Setup/{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "T.C.MVCWeb.Areas.Setup.Controllers" }
);
}
}
请求控制器
namespace T.C.MVCWeb.Areas.Setup.Controllers
{
public class FacilityController : Controller
{
// GET: FacilitySetup
public ActionResult Index()
{
...
}
}
}
我添加了 Phil Haack 的 RouteDebugger,可以看到 404 请求认为 "Setup" 是控制器,但我不明白为什么,其余的输出让我感到困惑而不是帮助。
感谢 NightOwn888 的评论,我找到了一条通过属性声明的路由。有问题的路由属性声明了 Setup/{action},旨在允许区域 URL 本身 http://localhost:40078/Setup/ 映射到 SetupController。