質問

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

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の各リクエストに対してこのセッションコードを実行できる場所はありますか?

役に立ちましたか?

解決

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

他のヒント

リクエストごとにASP.NETアプリケーションで何かを実行したい場合は、おそらくコントローラに構築するよりもIHttpModuleに構築する方が良いでしょう。後継者がコントローラーを正しく実装することをどのように保証しますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top