所以我基本上有一个自定义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
被调用,而且我认为redirUrl
(OnActionExecuting
方法中提到的)的相应操作将被调用,因为我将Response
重定向到它,但是不,首先调用/ SomeController / YouShouldNotEnterHere的相应Action(但实际上并未在浏览器中绘制,但操作仍然消耗时间),并且调用redirUrl
的相应操作(并在浏览器中绘制)。这是某种错误吗?或者这应该是这样的?无论如何我能做什么呢
答案 0 :(得分:3)
听起来你正在授权,在这种情况下使用的正确属性是AuthorizeAttribute
这将代码将修复您现有的属性:
filterContext.Result = new RedirectResult { Url = redirUrl };