2011-11-07 12 views
9

Tôi hiện đang làm việc trên ServiceStack, chỉ rất mới với nó. (Khá thú vị, họ nói rằng họ tốt hơn WCF và WCF REST (GET, POST, PUT, DELETE))Tôi có thể đăng chuỗi JSON/XML làm yêu cầu POST cho REST ServiceStack không?

Tôi cũng thấy hữu ích, ít mã hơn để chạy và chạy nhanh.

Hiện tại khi tôi muốn đăng dữ liệu. Tôi làm đối tượng của lớp và gửi yêu cầu POST.

JsonServiceClient client = new JsonServiceClient(myURL); 
MYclass cls= MakeObjectForServiceStackToInsertData(); 
var res = client.Post<MYClass>("/postrequest", cls); 

Bằng mã trên bạn có thể hiểu, tôi đang làm gì. Tôi đoán tôi không sai. Xin vui lòng cho tôi biết nếu bạn đang bối rối.

Tôi có thể tạo chuỗi bằng JSON cho lớp của mình (KEY->Value) trong ứng dụng khách của tôi (thủ công) và POST nó bằng cách sử dụng chồng dịch vụ tới máy chủ để Gửi dữ liệu.

ví dụ:

string str = myJsonString(); 
var res = client.Post<.....> 

Vì vậy, thay vì đăng toàn bộ đối tượng, nó là tốt hơn nếu tôi có thể làm cho chuỗi JSON và deserialize nó trong POST trường hợp ServiceStack và chèn dữ liệu trong DB?

Bất kỳ ý tưởng nào?

Trả lời

8

Tôi không chắc động cơ của bạn muốn chuyển vào chuỗi JSON thô, nhưng nếu để đảm bảo bạn chỉ chuyển qua một tải trọng JSON nhỏ, bạn có thể tự tin sử dụng Json/Jsv ServiceClients vì chúng không bao gồm các giá trị null vì vậy sẽ chỉ chuyển các trường bạn điền.

Bạn có thể xác minh những gì được serilalized bằng cách sử dụng bộ nối tiếp Json trực tiếp.

Console.WriteLine(JsonSerializer.SerializeToString(cls)); 

Nếu bạn chỉ muốn thử nghiệm/debug dịch vụ của bạn, cách tốt nhất là chỉ cần sử dụng trình duyệt bởi một trong hai Populating các lĩnh vực với chuỗi truy vấn, ví dụ:

http://localhost/myservice/postrequest?Field1=value1&Field2=value2 

Trong hầu hết các trường hợp bạn muốn chuyển qua một chuỗi JSON thô, bạn sẽ cần phải sử dụng một ứng dụng HTTP khác, trong trường hợp này, bạn nên gọi dịch vụ web POST'ing dữ liệu biểu mẫu thay vì nó được hỗ trợ bởi tất cả các máy khách HTTP và bạn không cần JSON serializer để làm. ví dụ. dưới đây là cách để gọi dịch vụ tương tự, qua HTTP POST với curl:

curl -d "Field1=value1&Field2=value2" http://localhost/myservice/postrequest 

Có rất nhiều cách khác bạn có thể gọi dịch vụ tương tự, xem Service Stack's Hello World example để xem danh sách đầy đủ. Đây là cách bạn sẽ gọi nó là sử dụng HTML:

<form action="http://localhost/myservice/postrequest" method="POST"> 
    <input type="text" name="Field1" value="value1" /> 
    <input type="text" name="Field2" value="value2" /> 
</form> 

Vì bạn đang đăng nó từ một trình duyệt web Dịch vụ stack sẽ trở HTML nhưng nếu bạn muốn xem các JSON kết quả bạn chỉ cần nối thêm format = json? vào url.

Hoặc bạn chỉ có thể sử dụng JavaScript và jQuery để POST để dịch vụ web của bạn, ví dụ dưới đây sẽ trả lại kết quả như JSON mà có được sẽ tự động chuyển đổi thành một đối tượng JS:

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/myservice/postrequest", 
    data: {Field1: "value1", Field2: "value2"}, 
    success: function(r) { alert(r.Result) }, 
    dataType: "application/json" 
}); 

Những điều tốt đẹp về cách sử dụng trình duyệt web để gỡ lỗi dịch vụ của bạn là bạn có thể sử dụng trình kiểm tra mạng tích hợp (tức là thanh tra web trong Chrome) để xem yêu cầu/phản hồi đầy đủ của dịch vụ web của bạn.

Nếu bạn không quen thuộc với nó, tôi cũng khuyên bạn nên làm quen với Fiddler cho phép bạn dễ dàng phân tích lưu lượng truy cập HTTP.

+0

Tôi đánh giá cao câu trả lời của bạn, trong trường hợp của tôi tôi tự hỏi là có thể cho tôi ở định dạng JSON từ ứng dụng COnsole. Để biết thêm chi tiết, vui lòng xem câu hỏi mới của tôi với chi tiết hơn http://stackoverflow.com/questions/8046538/json-format-data-from-console-application-to-service-stack –