Tôi vừa bắt đầu sử dụng ServiceStack, một thư viện tuyệt vời.ServiceStack và trả lại luồng
Tuy nhiên, tôi có yêu cầu kinh doanh, nơi chúng tôi phải trả lại xml và json trong đó xml phải ở định dạng cụ thể.
Ví dụ, chúng tôi đã có sẵn khách hàng mong đợi xml của định dạng:
<service name="service1" type="audio" .../>
nên về cơ bản một loạt các thuộc tính.
Tôi biết rằng ServiceStack sử dụng các khái niệm về DTO và sử dụng DataContractSerializer trả về các phần tử xml thay vì trong biểu mẫu ở trên với các thuộc tính xml.
tôi vẫn muốn sử dụng DTOs cho các yêu cầu (đi qua trong application/xml hoặc application/json trong tiêu đề Chấp nhận) và sau đó tôi có thể tạo ra chuỗi xml của riêng tôi hoặc các chuỗi json và sau đó trở về chúng như:
string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
trong đó chuỗi kết quả có thể là chuỗi xml hoặc chuỗi json.
Tôi nhận thấy trong câu trả lời phản hồi Kiểu nội dung dưới dạng văn bản/html.
Với cách tiếp cận tôi đang sử dụng, tôi có vi phạm bất kỳ nguyên tắc REST nào không? Sẽ có vấn đề với Content-Type như hiện tại (text/html) không?
Nếu tôi sử dụng phương pháp này, nó sẽ giải quyết các yêu cầu nghiệp vụ.
Sửa
tôi thấy rằng tôi có thể trở lại một httpResult như:
return new HttpResult(
new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
mang đến cho đúng content-type.
Vì vậy, đây có phải là cách phù hợp hoặc tôi sẽ gặp sự cố nếu tôi đi xuống tuyến đường này?
Cảm ơn sự trợ giúp. –
Có lợi ích nào trong việc trả lại chuỗi chứ không phải luồng không? –
Không, cả hai đều được viết trực tiếp vào HttpResponse OutputStream của ASP.NET. Vì vậy, sử dụng MemoryStream (nếu bạn đã có String trong bộ nhớ), hãy bổ sung thêm chi phí. Nó có ý nghĩa để trả về một chuỗi khi bạn muốn truyền đầu ra (tức là tránh tải toàn bộ phản hồi trong bộ nhớ) – mythz