这是我的控制器在root(无区域):
我的领域是:
+常规
+成员
所以我添加成员区之前我的Login
动作是在成员控制器(在Root中),每件事情都没问题,但我知道这个网址收到404错误
(http://MyProject.dev/members/login?ReturnUrl=%2f)
那么如何定义MapRoute来解决这个问题呢?
更新
我在Main Global.asax
尝试了这个:
routes.MapRoute(
"newLogMaproute",
"members/login{*pathInfo}",
new { area = "", controller = "Members", action = "Login"}
);
但是有一个错误:A path segment that contains more than one section, such as a literal section or a parameter, cannot contain a catch-all parameter.
我试试这个:
routes.MapRoute(
"newLogMaproute",
"members/login/{*pathInfo}",
new { area = "", controller = "Members", action = "Login"}
);
但是这个回归了404。
答案 0 :(得分:1)
这里发生的事情是区域注册发生在您的会员路线之前,因此区域路线始终优先。
我通过在Global.asax中创建以下内容在测试应用中修复此问题:
public static void RegisterPreAreaRoutes(RouteCollection routes)
{
routes.MapRoute(
"Members", // Route name
"members/login", // URL with parameters
new { controller = "members", action = "login" } // Parameter defaults
);
}
然后在Application_Start中确保此路由在之前映射区域已注册:
protected void Application_Start()
{
RegisterPreAreaRoutes(RouteTable.Routes);
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters( GlobalFilters.Filters );
RegisterRoutes( RouteTable.Routes );
}
答案 1 :(得分:0)
您需要为您的区域定义自定义路线。 这个不好。你可能会遇到问题。 最好不要造成歧义。
不要忘记使用new string []:
在rotes配置中定义命名空间 routes.MapRoute(
"Members", // Route name
"members/login", // URL with parameters
new { }, // Parameter defaults
new[] { "WebApp.Controllers" } // Namespaces for find
);