Web APIプロジェクト用にIValueProvider
の実装をいくつか作成しましたが、インタフェース上のContainsPrefix
メソッドの目的について混乱しています。Web API IValueProviderインターフェイスのContainsPrefixメソッドの目的は何ですか?
ContainsPrefix
方法は、この要約のコメントがあります
コレクションが、指定された接頭辞が含まれているかどうかを決定します。
ただし、この方法の概要は抽象的なものであり、その方法にどのような機能が提供されるのか、どのような機能がどのような機能を果たすのか説明しません。 prefix
はアクションパラメータ名になりますか?アクション名?コントローラの名前は?これらのいずれかの最初の3文字? IValueProvider
がどのアクションパラメータに値を提供すべきかを自動的に把握するためにこのメソッドが存在しますか?
私は私がWeb APIのCollectionModelBinder
内の参照、MutableObjectModelBinder
、SimpleModelBinderProvider
、およびCompositeValueProvider
を参照してくださいんがContainsPrefix
方法が私のIValueProvider
実装でのWeb APIフレームワークによって呼び出さ見ることはありません。たとえば、次の実装は、私のテストでは、私に何の問題が発生していない:
MyValueProvider:
public class MyValueProvider : IValueProvider
{
public bool ContainsPrefix(string prefix)
{
throw new NotYetImplementedException();
}
public ValueProviderResult GetValue(string key)
{
return new ValueProviderResult("hello", "hello", CultureInfo.InvariantCulture);
}
}
TestController:私のTestController
から
public class TestController : ApiController
{
public string Get([ModelBinder]string input)
{
return input;
}
}
GET
要求はハロー戻ります、だから私はGetValue
が呼び出されていることを知っていますMyValueProvider
ですが、例外はスローされませんので、ContainsPrefix
は呼び出されません。
ContainsPrefix
はいつWeb APIフレームワークから呼び出されると思いますか?- このメソッドにはどのような
prefix
が提供されますか?ここ
これは意味があり、最初にインターフェイスを実装したときに疑うものです。しかし、実際には 'ContainsPrefix'がフレームワークによって呼び出されることはありません。説明するためにサンプルコードを少し追加して質問を更新しました。 –
@CoreySmirtあなたは正しいです。 Web APIで使用されるデフォルトのモデルバインダーのうち、すべて(一部ではありません)は、GetValueを呼び出す前にContainsPrefixを呼び出しません(ソースコードを調べることで見つけました)。それは、予想される行動ではなく、それらのバインダーの作成者の監督だと思います。それにもかかわらず、上記の私はまだ有効ですが、私は使用されるはずだったContainsPrefixを実装するほうがよいでしょう。 – Evk
Web APIフレームワークが 'ContainsPrefix'を呼び出す際に使用する*すべてのモデルバインダーがキーではないという事実がここにあります。 'string'のような単純な型の場合、' ContainsPrefix'は決して呼び出されません。 –