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 からユーザー ID を取得し、2 つのストアド プロシージャを呼び出してデータを取得します...これで問題ありませんか? ありがとう

于 2013-08-28T03:16:52.443 に答える