0


この質問は基本的に、私がしていることが良い習慣であるかどうか、または問題の解決策を達成するための他の方法があるかどうかを知り、正当化することです。
ここに問題があります...

*私は多くのコントローラーとアクションメソッドを備えたMVCアプリケーションを持っています。顧客は、さまざまなソース(google、bing、サードパーティのサイト)からさまざまなアクションメソッドにアクセスし、最後にクエリ文字列の署名を追加します。

*コントローラーのすべてのアクションでクエリ文字列の値を確認したくないため。MVCControllerクラスを継承する新しいコントローラー「BaseController.cs」を作成しました。そして、次のコードを実装します。すべてのアプリケーションコントローラーはBaseControllerから継承します。

    public class BaseController : Controller
    {
       public BaseController():base()
       { 
            string siteReference = HttpContext.Request["ref"];
       }
    }


私はMVCの専門家にもっと良い方法を提案するように求めています。前もって感謝します。

-KK

4

1 に答える 1

3

目立たないようにする方法があります。グローバル アクション フィルターを使用して、ベース コントローラーを使用せずに同じことを行うことができます。また、継承よりも合成を優先します。

  public class GetQueryString: IActionFilter, IMvcFilter
    {

        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string siteReference = filterContext.HttpContext.Request["ref"];
        }


        public void OnActionExecuted(ActionExecutedContext filterContext)
        {

        }


        public bool AllowMultiple
        {
            get { return false; }
        }

        public int Order
        {
            get { return Filter.DefaultOrder; }
        }
    }
于 2012-08-13T17:39:42.610 に答える