【问题标题】:ASP.NET MVC global redirectASP.NET MVC 全局重定向
【发布时间】:2009-08-20 19:41:09
【问题描述】:

我们的大多数项目都是短期的并且具有促销性质。结果,我们的客户经常希望在促销结束时放置某种“程序结束”或“过期”页面。如何在不修改每个控制器及其方法的情况下将所有控制器操作一揽子重定向到一个特定的控制器操作?这甚至可能吗?

理想情况下,在伪代码中,我希望能够做这样的事情:

// somewhere in global.asax
if (current_action_url != desired_action_url)
    redirect to desired_action_url

我尝试在 URL 上进行简单的字符串匹配:

if (!Request.Url.AbsolutePath.ToLower().EndsWith("path/to/desired/page"))
    Response.Redirect("path/to/desired/page"); 

但是,由于我仍在使用 IE 6 并且必须使用通配符 hack,因此 IE 将所有请求重定向到页面(甚至是图像和样式表),这使事情变得非常糟糕。

【问题讨论】:

    标签: asp.net-mvc iis-6


    【解决方案1】:

    使用路线怎么样?定义适用于有效促销的路线,所有信息都可以转到通用的“促销过期”页面

            routes.MapRoute(
                    "PromoStillGoing",
                    "path/to/PromoStillGoing/{action}",
                    new { controller = "PromoStillGoing", action = "Index" });
    
            routes.MapRoute("Catch All", "{*path}", new { controller = "ExpiredPromos", action = "Index" });
    

    以上内容将为所有过期的促销活动提供一页,您的问题不确定这是否是您想要的。

    如果您希望每个促销有一个过期页面,那么在路由中您可以“忽略”请求的 url 中的操作,例如

            routes.MapRoute(
                    "ExpiredPromoName",
                    "path/to/PromoName/",
                    new { controller = "PromoName", action = "Index" });
    

    现在 /path/to/PromoName 下的任何内容都将使用 PromoNameController 的 Index 操作

    【讨论】:

    • 我认为“{*path}”部分是缺失的部分。我明天试试,如果它有效,我会问你问题。谢谢!
    猜你喜欢
    • 2019-04-03
    • 2015-09-18
    • 2023-03-17
    • 1970-01-01
    • 2010-12-23
    • 2011-06-25
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多