1

WEBAPI の IModelBinderProvider に相当するものは何ですか? この記事を読みましたが、デフォルトのバインディングを置き換える方法や独自のバインディング ルールを挿入する方法がまだわかりません。

編集:現在の「クラシック」MVC モデル バインダー プロバイダー (IModelBinderProvider を実装)。

public IModelBinder GetBinder(Type modelType)
        {
            Type binderType;

            lock (_syncLock)
            {
                // Check to see if a type was already bound.
                if (_binders.ContainsKey(modelType))
                    binderType = _binders[modelType];
                else
                {
                    // Check the assembly and look for a <name>ModelBinder
                    Assembly assembly = Assembly.GetExecutingAssembly();
                    Type[] types = assembly.GetTypes();

                    // Convention over configuration
                    binderType = types.FirstOrDefault(t => t.Name == modelType.Name + "ModelBinder");

                    if (binderType != null)
                        _binders[modelType] = binderType;
                }
            }

            if (binderType == null)
                return null;

            var binder = (IModelBinder) DependencyResolver.Current.GetService(binderType);
            return binder;
        }

したがって、バインダーの選択に依存関係リゾルバーを使用しようとしていることがわかります。

また、構成で、デフォルトのバインダーを次のように置き換えました

DependencyResolver.SetResolver(new StructureMapDependencyResolver(ObjectFactory.Container));

最後に、「LocationID」の例でパラメーターを(フォームまたはクエリ文字列として)送信し、次のようなwebapiアクションがある場合

public HttpResponseMessage MyAction(MyCls obj) {
   // do something
}

public class MyCls{
    public string LocationID {get;set;}
}

提供された「LocationID」パラメーターの値を取得するには、MyCls をバインドし、LocationID を取得する必要があります。

4

0 に答える 0