2012-06-25 135 views
3

我想能如果路由约束失败重定向,而不是只返回一个404.这是该方案:路由约束重定向

  • 用户点击页面www.test.com/preview/home/
  • 路由约束检查他们是否可以预览页面
  • 如果没有,重定向到www.foo.com/home/

这可能吗?

回答

3

这是可能的,但没有路由约束。路线约束不打算以这种方式使用。如果路线约束不满足,则路线不匹配。如果你想执行一些授权和重定向,如果这个授权失败,你最好写一个自定义的授权属性,并用它来装饰你的控制器动作。

有以下两种方式:

  1. 你想定制授权逻辑添加到现有的属性。在这种情况下,您从AuthorizeAttribute派生并覆盖AuthorizeCoreHandleUnauthorizedRequest方法来执行自定义授权和重定向(而不是导航到登录页面)(如果此逻辑失败)。

  2. 您不想要任何基本功能。在这种情况下,您从FilterAttribute派生并实现IAuthorizationFilter接口,并将您的可视化和重定向逻辑放入OnAuthorization方法中。

下面是如何在授权逻辑使用,你必须到处访问filterContext失败重定向一个例子:

var values = new RouteValueDictionary(new 
{ 
    controller = "home", 
    action = "index" 
}); 
filterContext.Result = new RedirectToRouteResult(values);