带有/多个路由的.NET 4.0 Web窗体路由

时间:2011-10-15 00:00:34

标签: c# asp.net routing webforms url-rewriting

我对路由没有超级经验,所以如果我没有正确使用它,请告诉我。

我创建了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。

感谢您的帮助!

0 个答案:

没有答案