1

モデル バインディング フェーズ中にアクションを取得し、属性を読み取る方法はありますか?

シナリオは次のとおりです。

特定のデータ型に対してデフォルトのモデル バインダーをセットアップしましたが、その使用方法 (アクションの属性によって制御される) によっては、データのセットを無視する必要があります。

コントローラー コンテキストで RouteData を使用して、データを取得するために使用できるアクション名を確認できますが、その情報が既に利用可能であるかどうか疑問に思いました。

さらに、問題のアクションが非同期のものである場合は、それを検索するためにより多くの処理が必要になります...

4

1 に答える 1

0

スタック トレースをたどって、ActionResult を返し、属性をプルする最初のメソッドを見つけることができます。

    StackTrace st = new StackTrace();
    for (int i = 0; i < st.FrameCount; i++)
    {
        StackFrame frame = st.GetFrame(i);
        MethodBase mb = frame.GetMethod();
        if (mb is MethodInfo)
        {
            MethodInfo mi = (MethodInfo)mb;
            if (typeof(ActionResult).IsAssignableFrom(mi.ReturnType))
            {
                object[] methodAttributes = mb.GetCustomAttributes(true);
                object[] objectAttributes = mb.DeclaringType.GetCustomAttributes(true);
            }
        }
    }

これは、アクションメソッドに到達する前にモデルがバインドされたときではなく、アクションが呼び出された後に UpdateModel を呼び出す場合にのみ機能します。

于 2010-08-15T13:59:04.610 に答える