路由约束重定向

时间:2012-06-25 10:15:53

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我希望能够在路由约束失败时重定向,而不是仅返回404.这是场景:

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

这可能吗?

1 个答案:

答案 0 :(得分:3)

这是可能的,但没有路线限制。路径约束不打算以这种方式使用。如果不满足路线约束,则路线不匹配。如果您想要执行某些授权并重定向,如果此授权失败,您最好编写自定义Authorize属性并使用它来装饰控制器操作。

有两种可能性:

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

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

  3. 以下是如何使用您可以随处访问的filterContext在授权逻辑失败时重定向的示例:

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