【发布时间】:2017-09-25 21:04:58
【问题描述】:
我是 MVC 新手并正在编辑现有应用程序。目前我在 RouteConfig.cs 中看到以下内容:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Util",
"util/{action}",
new {controller = "util"});
routes.MapRoute(
"Catchall",
"{*url}",
new {controller = "Main", action = "CatchUrl"});
}
}
在主控制器内部有一个逻辑,它基本上执行RedirectToRoute 并将名为location 的区域、控制器、操作和查询字符串设置为某个值。
public class MainController : Controller
{
public ActionResult CatchUrl()
{
var agencyId = 9;
var routeValues = new RouteValueDictionary
{
{"area", "area1"},
{"controller", "dashboard"},
{"action", "index"},
{"location", "testLocation"}
};
return RedirectToRoute(routeValues );
}
}
这似乎工作正常,当你给它一个无效区域时,它会正确地转到默认区域。
我还看到了一个名为 CustomAreaRegistration.cs 的文件:
public abstract class CustomAreaRegistration : AreaRegistration
{
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
AreaName + "Ajax",
AreaName + "/{controller}/{action}",
new { action = "Index" }
);
context.MapRoute(
AreaName + "ShortUrl",
AreaName + "/{controller}",
new {action = "Index"}
);
}
}
我无法理解区域路由的工作原理以及它如何知道如何转到正确的控制器。
此外,我正在努力让您在访问时得到它
/{area}/ 它会执行一些逻辑并将您重定向到正确的控制器。类似于 CatchUrl 的工作原理
我的尝试:
routes.MapRoute(
"AreaIndex",
"{module}/",
new {controller = "Main", action = "Index"});
主控制器:
public class MainController : Controller
{
public ActionResult Index()
{
var requestHost = HttpContext.Request.Url?.Host;
var location= requestHost == "localhost" ? Request.QueryString["location"] : requestHost?.Split('.')[0];
var routeValues = new RouteValueDictionary
{
{"area", ControllerContext.RouteData.Values["module"]},
{"controller", "dashboard"},
{"action", "index"},
{"location", location}
};
return RedirectToRoute(routeValues );
}
public ActionResult CatchUrl()
{
var routeValues = new RouteValueDictionary
{
{"area", "area1"},
{"controller", "dashboard"},
{"action", "index"},
{"location", "testLocation"}
};
return RedirectToRoute(routeValues );
}
}
我明白了
路由表中没有路由与提供的值匹配。
我不确定为什么 CatchUrl 有效而我的无效。
【问题讨论】:
-
catch-all 的相关部分似乎是通配符组件
{*url},我在您的{module}/路由中看不到任何类似的东西。或许可以看看下面的相关信息:stackoverflow.com/questions/7515644/…
标签: c# asp.net-mvc asp.net-mvc-routing