2015-10-02 15 views
5

Api'm üzerinde, bir nesneyi dışarı çeken ve bir biçimlendirici aracılığıyla döndüren genel GetById ve GetByIds olan bir sürü işlem var.Web API'sında int [] parametresini nasıl yapabilirim?

Bu işlemler şu şekilde görünür:

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

örneğin http://localhost/api/SomeEntity/ByIds?ids=1&ids=2 ile bu vurursan beklediğiniz gibi bir 1'den dizi ve 2 olsun.

http://localhost/api/SomeEntity/ByIds?ids= ile buna bastığınızda boş bir dizi elde etmeyi bekleyebilirsiniz, ancak 0 değerini içeren int[1] elde edersiniz.

ben ne olur onu belirtilen bir eleman olarak tanır şüpheli, bu yüzden default(int) kullanır ve koyar, dönüştürmek olamaz sana bir değere sahip bir int dizisi, 0'a

değerini verir dizi haline Ancak, http://localhost/api/SomeEntity/ByIds?ids=potato ile vurursanız, geçersiz bir modele alırsınız ve otomatik olarak bunu hallederim.

Sorun, boş bir sorgu parametresi değerini boş bir diziye veya bir ModelState hatasına (yani boş bir değer sağladığınızda patatesle aynı davranışı) eşleme tüm yaklaşımını yakalama nedir? Ben bir modelstate hatası tercih ve daha mantıklı olacağını düşünüyorum.

+0

gireceğim. bir çözüm buldun mu? Benim durumumda ModelState hatasına boş bir diziyi tercih ederim. –

cevap

1

0 değerinin int değeri, bir dizge için null ile aynı olduğu için oluşur. Int'in null int kullanım değerine sahip olmasını istiyorsanız?

Javascipt:

int i = 0 

string myString = null; 

tamsayı eşdeğer midir Ve siz int boş kullanım olmasını istiyorsanız:

int? i = null; 

ne olur dizisi istiyor ise En az bir öğe, o bir öğeye bir değer atamayacaktır. Fakat bir tamsayı varsayılan değeri 0 olduğundan, bu değere de

+0

Ve eylemde, count == 1 ve item 0'ın sıfır olup olmadığını kontrol edin, modele hata ekleyin. –

İlgili konular