从基本控制器重定向到操作方法

Posted

技术标签:

【中文标题】从基本控制器重定向到操作方法【英文标题】:redirect to action method from base controller 【发布时间】:2013-06-20 23:35:04 【问题描述】:

我在我的基本控制器类中初始化了方法,每当执行任何操作方法时都会调用该方法。在每个操作方法上,我想检查我的会话,如果它为空,它应该重定向到登录页面。

 public class BaseController : Controller

    protected IDataRepository _appData = new DataRepository();

    protected override void Initialize(RequestContext requestContext)
    
        base.Initialize(requestContext);

        if (SessionFactory.CurrentAdminUser == null)
        
            RedirectToLogin();
        
    
 
public ActionResult RedirectToLogin()
    
        return RedirectToAction("AdminLogin", "Admin");
    

它正在调用此方法,但不重定向到管理员登录方法,并继续执行并调用正在进行的方法,因此会出现错误。

简而言之,我想检查我的应用程序会话何时为空,它应该重定向到登录页面,并且不方便检查所有方法。请建议我一些好方法。

【问题讨论】:

【参考方案1】:

您正在调用 RedirectToLogin,而后者只是返回一个没有人使用的 RedirectToActionResult,并且它不会影响流程的流程。

试试这个:

protected override void OnActionExecuting(ActionExecutingContext filterContext)

    base.OnActionExecuting();

    if (SessionFactory.CurrentAdminUser == null)
        filterContext.Result = new RedirectResult(Url.Action("AdminLogin", "Admin"));

或者,如果您坚持覆盖Initialize

protected override void Initialize(RequestContext requestContext)

    base.Initialize(requestContext);

    if (SessionFactory.CurrentAdminUser == null)
    
        requestContext.HttpContext.Response.Clear();
        requestContext.HttpContext.Response.Redirect(Url.Action("AdminLogin", "Admin"));
        requestContext.HttpContext.Response.End();
    

另外,检查[Authorize] 过滤器,它可能更适合您的需求。见here。

【讨论】:

感谢您的建议,但我无法使用 Url.Action。你能建议我需要为那个 Url.Action 引用哪个程序集吗? @Silvia,我猜是System.Web.Mvc【参考方案2】:

更简单的方法:

public void RedirectToLogin()

    RedirectToAction("AdminLogin", "Admin").ExecuteResult(this.ControllerContext);

【讨论】:

以上是关于从基本控制器重定向到操作方法的主要内容,如果未能解决你的问题,请参考以下文章

从 MVC 4 控制器重定向到 .aspx 页面

服务器重定向和客户端重定向

将 segue 从一个视图控制器重定向到另一个视图控制器

Cakephp 内部从控制器重定向到另一个控制器

在 ASP.NET MVC 中使用 AJAX 方法时使用 C# 控制器重定向到页面

如何在 IOS 应用程序中从视图控制器重定向回主故事板