3

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

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

这可能吗?

4

1 回答 1

3

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

有2种可能:

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

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

这是一个使用您在任何地方都可以访问的 filterContext 如果授权逻辑失败时如何重定向的示例:

var values = new RouteValueDictionary(new
{
    controller = "home",
    action = "index"
});
filterContext.Result = new RedirectToRouteResult(values);
于 2012-06-25T10:43:33.753 回答