asp.net-mvc - 从 Controller 重定向重定向不起作用

标签 asp.net-mvc asp.net-mvc-3 controller asp.net-membership session-variables

我有用于检查某些 session 数据是否存在的 Controller 的替代。该数据是存储库正常工作所必需的,因此,如果该数据不存在,则在检查后应注销用户。

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    if (Session["CompanyID"] != null)
    {
        repo.CompanyID = (long)Session["CompanyID"];
    }
    else
    {
        RedirectToAction("LogOff", "Account");
    }
}

我的代码看起来像这样,但是即使调用RedirectToAction, Controller 仍会打开默认操作,并且用户未注销。
您可以建议如何处理此问题吗?

我以这种方式使用此 session 数据,因为这是我所知道的第一个地方,在这里我可以检查此特定数据是否存在。用户登录时写入。

此数据是数据库中用户的一部分。我做了一个自定义的成员资格和角色提供者。有没有一种方法可以某种方式将此数据添加到MembershipUser类型的“用户”,以便可以像用户名一样在构造函数中进行访问?

最佳答案

考虑改用自定义ActionFilter

public class HasCompanyIdAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Session["CompanyID"] == null)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {action = "LogOff", controller = "Account"}));
        }
    }
}

然后可以这样应用它:
[HasCompanyId]
public class MyController : Controller 
{
    public ActionResult SomeAction()
    {
        return View();
    }
}

这会将属性应用于MyController(或其子类)处理的所有请求。

关于asp.net-mvc - 从 Controller 重定向重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8225930/

相关文章:

asp.net-mvc - 生成 <DbContext> 时出错

c# - ASP.NET MVC 4+,禁用 JavaScript

javascript - 将参数从 View 传递到 Controller Razor

ExtJS Controller 在超链接点击时触发

cakephp - cakephp添加输入错误 Controller

javascript - 如果在特定页面上运行脚本 - rails

asp.net-mvc - CSS 包含在 MVC 中

javascript - 错误 : [ng:areq] Argument 'MyCtrl' is not a function, 未定义

jquery - 如何使用带有 MVC 3 的 jQuery 验证器来显示自定义图像

c# - 设置默认值内联添加Jqgrid