2015-10-02 7 views
5

私は、エンティティを取り出してフォーマッタを介して返すジェネリックGetByIdとGetByIdsである、私のAPI上で操作の束を持っています。Web APIでint []パラメータが必要ですか?

これらの操作は、次のようになります。あなたが例えばhttp://localhost/api/SomeEntity/ByIds?ids=1&ids=2でこれをヒットした場合

[HttpGet] 
[Route("ByIds")] 
public IHttpActionResult ByIds([FromUri]int[] ids) 
{ 
    var items = _myContext.SomeEntity.Where(a => ids.Contains(a.ID)).ToList(); 
    return SomeFormatter(items); 
} 

、あなたが期待するようでは1と2との配列を取得します。

http://localhost/api/SomeEntity/ByIds?ids=でこれをヒットした場合、空の配列が得られると思われるかもしれませんが、0の値を持つint[1]が得られます。

私は何が起こることは一つの要素は、指定されたとして、それを認識している疑いがある、それを変換することはできませんので、default(int)を使用して、あなたに一つの値を持つint型の配列を与える配列の中にいることを置く、0

の値しかし、http://localhost/api/SomeEntity/ByIds?ids=potatoでそれを打つと、無効なモデル状態になり、自動的に処理します。

空のクエリパラメータ値を空の配列またはModelStateエラー(つまり、空の値を指定するとポテトと同じ動作)にマッピングする方法はどれですか?私は、モデル状態のエラーが優先され、より論理的だと思います。

+0

私はこの問題にもあまりにもぶつかります。あなたは解決策を見つけましたか?私の場合は、ModelStateエラーに空の配列を使用します。 –

答えて

1

int型の値0は、0が文字列のnullと同じであるために発生します。 intの値にnullを使用する場合は、intを使用しますか?

Basicly:

int i = 0 

string myString = null; 

の整数と同等であり、あなたはあなたのintはnullを使用したい場合:

int? i = null; 

は、だから何が起こるかは、配列が望んでいます少なくとも1つのアイテムは、その1つのアイテムに値を割り当てません。しかし、整数のデフォルト値は0なので、それはその値になります

+0

実際には、count == 1で、項目0がnullの場合はmodelstateにエラーを追加します。 –

関連する問題