如何从basecontroller重定向到特定的URL

时间:2013-10-14 11:44:52

标签: c# asp.net-mvc asp.net-mvc-4

我有一个HomeController和一个BaseController以及BaseController中的一个方法,我需要将其重定向到特定的URL。

以下是代码: -

public class HomeController : BaseController
{
    public ActionResult Index()
    {
       VerfiySomething();

       CodeLine1.....
       CodeLine2.....
       CodeLineN.....
    }
}

这是基础控制器 -

public class BaseController : Controller
{
    public void VerfiySomething()
    {
       if(based_on_some_check)
       {
           Redirect(myurl);
       }
    }
}

但是,即使在BaseController中执行“Redirect(myurl)”后,codeline1,2 ... N也会在HomeController中执行

我想要的是它应该重定向到其他URL(而不是任何其他动作)而不执行CodeLin1,2 ... N

2 个答案:

答案 0 :(得分:4)

我会实现ActionFilterAttribute

请参阅:Redirect From Action Filter Attribute

public class VerifySomethingAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (based_on_some_check)
        {
            filterContext.Result = new RedirectResult(url);
        }

        base.OnActionExecuting(filterContext);
    }
}

用法:

[VerifySomething]
public ActionResult Index()
{
    // Logic
}

答案 1 :(得分:1)

您可以在控制器的虚拟方法OnActionExecuting中验证某些内容:

class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext context)
    {
        if (somethingWrong)
        {
            context.Result = GetSomeUnhappyResult();
        }
    }
}