ASP.NET MVC 4在ActionFilterAttribute中重定向响应

时间:2014-02-11 14:41:42

标签: asp.net-mvc action-filter

所以我基本上有一个自定义ActionFilterAttribute,并在其中覆盖一个看起来像这样的方法

public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
    bool shouldEnter = true;
    string redirUrl = "SomeController/SomeAction";
    // some checks here which change the value of shouldEnter;
    if (!shouldEnter)
    {
        filterContext.HttpCOntext.Response.Redirect(redirUrl);
    }
}

这是ActionFilterAttribute的一个非常简单的实现。基本上我检查了一些东西,而不是决定让这个人进去或不进去。如果我不让他进来,我应该将他重定向到某个URL,我使用OnActionExecuting方法的上述实现。但问题是,在它进入someUrl之前,他要求的动作首先被执行。假设我已在~/SomeController/YouShouldNotEnterHere请求该页面,此操作具有该属性。 OnActionExecuting被调用,而且我认为redirUrlOnActionExecuting方法中提到的)的相应操作将被调用,因为我将Response重定向到它,但是不,首先调用/ SomeController / YouShouldNotEnterHere的相应Action(但实际上并未在浏览器中绘制,但操作仍然消耗时间),并且调用redirUrl的相应操作(并在浏览器中绘制)。这是某种错误吗?或者这应该是这样的?无论如何我能做什么呢

1 个答案:

答案 0 :(得分:3)

听起来你正在授权,在这种情况下使用的正确属性是AuthorizeAttribute

这将代码将修复您现有的属性:

filterContext.Result = new RedirectResult { Url = redirUrl };