我希望能够在路由约束失败时重定向,而不是仅返回404.这是场景:
这可能吗?
答案 0 :(得分:3)
这是可能的,但没有路线限制。路径约束不打算以这种方式使用。如果不满足路线约束,则路线不匹配。如果您想要执行某些授权并重定向,如果此授权失败,您最好编写自定义Authorize属性并使用它来装饰控制器操作。
有两种可能性:
您想要将自定义授权逻辑添加到现有属性。在这种情况下,您从AuthorizeAttribute派生并覆盖AuthorizeCore
和HandleUnauthorizedRequest
方法以执行自定义授权和重定向(而不是导航到登录页面),如果此逻辑失败。
您不需要任何基本功能。在这种情况下,您派生自FilterAttribute并实现IAuthorizationFilter
接口,并将您的授权和重定向逻辑放在OnAuthorization
方法中。
以下是如何使用您可以随处访问的filterContext在授权逻辑失败时重定向的示例:
var values = new RouteValueDictionary(new
{
controller = "home",
action = "index"
});
filterContext.Result = new RedirectToRouteResult(values);