0

我正在开发一个 ASP.NET MVC4 应用程序,我需要在登录 2 存储过程之后调用以获取特定于用户的详细信息......我有一个登录控制器来做这些事情

[HttpPost]
public ActionResult Login(UserLogin user)
{
  if (ModelState.IsValid)
  {
    bool res = System.Web.Security.Membership.ValidateUser(user.UserName, user.Password);
    if (res)
    {
       Utente utente = commonRepository.GetProfiloUtente(user.UserName);

       if (utente != null)
       {
         Session["utente"] = utente;
       }

       DateTime dataLavorativa = commonRepository.GetGiornoLavorativoPrecedente(utente.IDInterno);

       Session["data_lavorativa"] = dataLavorativa;

       FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe);
       return RedirectToAction("Index", "Home");
     }
     else
     {
        ModelState.AddModelError("", "Login data is incorrect!");
     }
   }
   return View("Index", user);
 }

当用户未通过身份验证并且他被迫从登录页面传递时,这有效......

当用户连接到应用程序但他已经通过身份验证时,我应该将代码放在哪里以便调用这些方法?

我不能把它放在每个控制器的每个索引操作中......谢谢

4

2 回答 2

1

我认为您可以为此目的使用 Global.asax - Application_PreRequestHandlerExecute 方法。

public void Application_PreRequestHandlerExecute(Object source, EventArgs e)
{
bool isAuthenticated = (System.Web.HttpContext.Current.User != null) 
        && System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
    if (isAuthenticated )
        {
            //Do call procedures
        }
}

希望能帮助到你。

于 2013-08-27T06:50:12.963 回答
0

我已经修复了那部分......我在 App_Start 而不是控制器中添加了事件处理程序......因为我处于集成模式我无法访问 PreRequestHandlerExecute 中的会话对象,我选择创建一个 BaseController并覆盖它的 OnAuthorization ...这是错误的吗?在这个方法中,我读取它是否已经过身份验证,如果我已经有一个 Session["user"] ...如果没有,我从 cookie 中获取 userID 并调用 2 存储过程来检索数据...这可以吗?谢谢

于 2013-08-28T03:16:52.443 回答