0

すべてのコントローラーが継承するコントローラーがあり、コントローラーのリクエストごとにコードを実行する必要があります。私は次のことを試しました:

protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
    if (Session["mallDetected"] == null)
    {
        Session["mallDetected"] = DateTime.Now.Ticks;
        IList<Mall> malls = Mall.FindNearestByIp(Request.UserHostAddress);

        if (malls.Count > 0)
        {
            Session["mall"] = malls[0];
        }
    }

    base.Execute(requestContext);
}

しかし、どうやらセッション状態は、base.Execute()を呼び出した後まで、Executeメソッドで使用できません。これは私には機能しません。ASP.NET MVCのリクエストごとにこのセッションコードを実行できる場所はありますか?

4

2 に答える 2

6

ベースコントローラーでオーバーライドOnActionExecutedするか、フィルターとして機能を実装してみてください。

于 2009-07-30T20:31:59.900 に答える
1

要求ごとにASP.NETアプリケーションで何かを発生させたい場合は、コントローラーにビルドするよりも、IHttpModuleにビルドする方がよいでしょう。後継者がコントローラーを正しく実装することをどのように保証しますか?

于 2009-07-30T20:33:39.770 に答える