我对路由没有超级经验,所以如果我没有正确使用它,请告诉我。
我创建了3条路线:LocationPages,ServicePages和StaticPages。我把它们分成3条路线,因为它们存储在数据库中的3个表中。我的问题是,LocationPages和ServicePages的default.aspx页面的内容存储在StaticPages表中,因为它没有与实际位置或服务页面相同的结构。
我的问题是,当访问domain.com/locations/时,LocationPages路由会在StaticPages路由应该和serivce页面相同的情况下选择它。它会选择它,因为位置页面的路径是domain.com/locations/cityname /.
我尝试使用Response.RedirectToRoute(“StaticPages”),因为它无法找到位置页面,因此静态页面路由可以处理它并查询位置的默认页面或发送到404.但是,每次route param为null。
这是我的代码&路线:
void RegisterRoutes(RouteCollection routes)
{
routes.Ignore("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("LocationPages", "Locations/{*RouteLocation}", "~/LocationRouteHandler.aspx");
routes.MapPageRoute("ServicePages", "Services/{*RouteService}", "~/ServiceRouteHandler.aspx");
routes.MapPageRoute("StaticPages", "{*RoutePage}", "~/default.aspx");
}
位置路线处理程序:
protected void GetLocationPage()
{
try
{
string RouteLocation = Page.RouteData.Values["RouteLocation"] as string;
if (RouteLocation.EndsWith("/"))
RouteLocation = RouteLocation.TrimEnd('/');
AccessLocation location = new AccessLocation();
lpd = location.GetLocationDetailByRouteLocation(RouteLocation);
if (lpd != null)
{
if (lpd.LocationPage.Active == false)
Response.Redirect("~/Error/404.aspx");
}
else
Response.Redirect("~/Error/404.aspx");
}
catch
{
Response.RedirectToRoute("StaticPages");
Response.End();
}
}
静态页面路由处理程序:
protected void GetContentPage()
{
try
{
string RoutePage = Page.RouteData.Values["RoutePage"] as string;
if (string.IsNullOrEmpty(RoutePage))
RoutePage = "Home";
if (RoutePage.EndsWith("/"))
RoutePage = RoutePage.TrimEnd('/');
AccessContent content = new AccessContent();
cpd = content.GetContentDetailByRoutePage(RoutePage);
if (cpd != null)
{
if (cpd.ContentPage.Active == false)
Response.Redirect("~/Error/404.aspx");
}
else
Response.Redirect("~/Error/404.aspx");
}
catch
{
Response.Redirect("~/Error/404.aspx");
}
}
当我调试时,我确实看到它进入静态页面的方法,但RoutePage变量始终为null。
感谢您的帮助!