2012-12-20 7 views
9

Cú pháp URL để truyền một đối tượng với đối tượng lồng nhau vào phương thức ASP.NET Web API GET của tôi là gì? Điều này có thể không? phương thức GET http://mydomain/mycontroller?...Cú pháp URL REST để truyền một kiểu phức hợp lồng nhau là gì?

MyController:

public void Get([FromUri]MyType myType) { ... } 

C loại #:

public class MyType 
{ 
    public string Name { get; set; } 
    public NestedType Foo { get; set; } 
} 

public class NestedType 
{ 
    public int Bar { get; set; } 
} 
+0

này trông giống như một cuộc thảo luận liên quan thú vị: http://stackoverflow.com/questions/7104578/rest-complex-composite-nested -resources – JayC

Trả lời

9

Có thể - hãy thử đi qua các URL trong định dạng này:

?myType.Foo.Bar=3&myType.Name=Maggie 
+1

Cảm ơn Maggie, câu trả lời của bạn là hoàn hảo. –

+0

Điều gì sẽ xảy ra khi bạn cố gắng làm điều tương tự trong trường hợp 'MyType' có thuộc tính sau: 'public IEnumerable Foos {get; bộ; } '?? : OI chỉ cần thử nó và không thể tìm ra những gì để đặt trong chuỗi truy vấn: (Tôi đã làm điều này trước khi cho các loại phức tạp có bộ sưu tập của các loại đơn giản ('? MyType.MyString = firstElement & MyType.MyString = secondElement'), nhưng không bao giờ phức tạp các loại có bộ sưu tập các loại phức tạp khác !: ( –

+0

Woah. Tôi chỉ tìm thấy câu trả lời của bạn ở đây: http://stackoverflow.com/a/13963155/326110 Bạn đá! –

0

Nếu bạn đang cố gắng để thực hiện một get mà thực hiện như sau: 1) lấy theo tên 2) nhận được bởi Foo.Bar

Sau đó, bạn có thể sử dụng tham số chuỗi truy vấn. REST pass multiple inputs to GET method

Nếu bạn không thực sự cố gắng thực hiện GET và thay vào đó bạn đang cố gắng đăng dữ liệu lên máy chủ thì bạn nên sử dụng POST.

+0

Trong khi Lee đặc biệt đề cập đến GET trong câu hỏi của mình, tinh thần của câu hỏi về mặt kỹ thuật được áp dụng bất kể động từ HTTP. Nếu chúng ta đang thảo luận về phương thức Post() của controller của anh ta, và anh ta muốn (hoặc cần thiết) chấp nhận các tham số được truyền vào URI, tình huống sẽ giống hệt nhau. Nói "chỉ cần sử dụng POST" không trả lời câu hỏi nhiều như váy xung quanh nó. –