我有用于检查某些 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/