2015-10-02 21 views
5

Tôi có một loạt các hoạt động trên api của tôi là GetById chung và GetByIds để kéo một thực thể ra và trả về thông qua trình định dạng.Làm cách nào để tạo tham số int [] trong api web?

Những hoạt động giống như thế này:

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

Nếu bạn nhấn này với http://localhost/api/SomeEntity/ByIds?ids=1&ids=2 ví dụ, bạn nhận được một mảng với 1 và 2 trong như bạn mong muốn.

Nếu bạn nhấn số này với http://localhost/api/SomeEntity/ByIds?ids=, bạn có thể nhận được một mảng trống, nhưng bạn nhận được int[1] với giá trị là 0 trong đó.

tôi nghi ngờ những gì xảy ra là nó nhận ra nó như là một yếu tố xác định, không thể chuyển đổi nó, vì vậy sử dụng default(int) và đặt đó vào mảng, mang đến cho bạn một mảng int với một giá trị, giá trị là 0.

Tuy nhiên nếu bạn nhấn nó với http://localhost/api/SomeEntity/ByIds?ids=potato thì bạn sẽ nhận được một mô hình không hợp lệ và tôi sẽ tự động xử lý điều đó.

Câu hỏi là, bắt tất cả cách tiếp cận ánh xạ giá trị tham số trống cho một mảng trống hoặc lỗi ModelState (tức là hành vi tương tự như khoai tây nếu bạn cung cấp giá trị trống)? Tôi nghĩ rằng một lỗi mô hình sẽ được ưa thích và hợp lý hơn.

+0

Tôi cũng gặp vấn đề này. Bạn đã tìm thấy một giải pháp? Trong trường hợp của tôi, tôi muốn một mảng trống cho lỗi ModelState. –

Trả lời

1

Giá trị int của 0 xảy ra vì 0 là giống như null cho một chuỗi. Nếu bạn muốn int của bạn có giá trị sử dụng null int?

Về cơ bản:

int i = 0 

là số nguyên tương đương với

string myString = null; 

Và nếu bạn muốn int của bạn để được null sử dụng:

int? i = null; 

Vì vậy, những gì xảy ra là mảng muốn ít nhất một mục, nó sẽ không gán một giá trị cho một mục đó. Nhưng vì giá trị mặc định của một số nguyên là 0, nó sẽ nhận được giá trị đó

+0

Và trong hành động, hãy kiểm tra nếu đếm == 1 và mục 0 là null, thêm lỗi vào modelstate. –

Các vấn đề liên quan