默认情况下,MVC授权属性设置HttpContext.Response.StatusCode = 401,当用户未被授权并且web.config中的部分路由到loginUrl属性时。ASP.NET MVC中有没有办法处理不同的Response.StatusCode值?
我想与其他响应代码做类似的事情。例如,我有一个名为ActiveAccount的属性,它验证用户的帐户当前处于活动状态,然后允许他们访问控制器。如果它们不活动,我想将它们路由到特定的控制器并查看(更新其帐户)。
我想复制授权属性的方式来处理此问题,并将StatusCode设置为410(警告:先前的数字拉出空气),并让用户路由到web.config中定义的位置文件。
我能做些什么来实现这种行为?还是有一个更简单的方法?
编辑:结果
我结束了回避的StatusCode和从属性中只是进行重定向,因为这是要简单得多。这里是我的代码简而言之:
// using the IAuthorizationFilter allows us to use the base controller's
// built attribute handling. We could have used result as well, but Auth seems
// more appropriate.
public class ActiveAccountAttribute: FilterAttribute, IAuthorizationFilter
{
#region IAuthorizationFilter Members
public void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
return;
// ... code which determines if our customer account is Active
if (!user.Status.IsActive)
filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new {controller = "Account"}));
}
#endregion
}
我是在试图实现类似的东西中间,当我看到这个答案,尽管你的例子比较好。当使用RedirectToRoute时,“410”部分变得完全不必要,因此消除了StatusRedirectResult类。该属性本身可以执行重定向。我很快发布我的代码在我的问题的底部。 – 2009-09-08 21:14:41