【问题标题】:Redirect to route gives page loop重定向到路由会产生页面循环
【发布时间】:2012-10-20 12:49:51
【问题描述】:

如果变量为空,我正在尝试重定向到另一条路线。它如何给出重定向循环错误。

路线:

routes.MapPageRoute("activities", "activities/{category}", "~/Pages/showAllActivities.aspx");
routes.MapPageRoute("activitiesSubPage", "activities/{page}", "~/default.aspx");

showAllActivities.aspx 上的代码:

if (category != null)
{
    ..
}
else
    Response.RedirectToRoute("activitiesSubPage", new { page = "1"});

两个路由 URL 都需要以“活动”开头。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# asp.net routing webforms


    【解决方案1】:

    如果路由中的category和page参数都是数字,ASP.NET是无法辨别的,所以比如/activities/2会被第一个路由匹配并处理...

    如果它们不同,例如 category 是一个字符串而 page 是一个数字,则 MapPageRoute 的 this overload 可以在其中为规则提供默认值和约束(例如 /activities/{page} 路由只接受数字:

    routes.MapPageRoute("activitiesSubPage", "activities/{page}", "~/default.aspx",
        new RouteValueDictionary() { { "page", 0 } },
        new RouteValueDictionary() { { "page", "[0-9]+" } });
    );
    routes.MapPageRoute("activities", "activities/{category}", "~/Pages/showAllActivities.aspx");
    

    请记住,此配置会将 /activites 路由发送到 /activities/0,默认值为 0。我已经将 {page} 路由放在上面,所以它首先被评估,任何过去的东西都会被下一条规则拦截。

    【讨论】:

    • 非常感谢。解决了问题!该页面也是一个字符串,但由于类别总是相同的,我在正则表达式中使用它们而不是数字检查。 "^((Category1)||(Category2)||(Category3))"
    【解决方案2】:

    问题是不知道他是通过category还是page

    您可以将其映射到 /activities/category/{id}(类别 ID/名称)和 /activities/page/{id}(页面 ID)之类的内容。输入/activities/{id} 没有意义,因为它不是活动ID,而是页码。

    【讨论】:

    • 嗯,我希望这是可能的。导航链接如下所示:/activities/2012 (category) --- /activities/calendar (page) 是否因为它再次通过所有路由,即使我指定了它应该使用哪一个?
    【解决方案3】:
    猜你喜欢
    • 2019-02-25
    • 2020-12-01
    • 2023-04-03
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2021-06-08
    相关资源
    最近更新 更多