Bạn có thể viết vào dòng Response.Body
trực tiếp (như Body
là một đồng bằng cũ System.IO.Stream
) và tự thiết lập kiểu nội dung:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
byte[] data = Encoding.UTF8.GetBytes(jsonString);
Response.ContentType = "application/json";
await Response.Body.WriteAsync(data, 0, data.Length);
}
Bạn có thể tiết kiệm cho mình một số vấn đề khi dùng một số tiện ích từ Microsoft.AspNet.Http
:
- Phương pháp mở rộng
WriteAsync
để ghi nội dung chuỗi vào nội dung phản hồi.
- Lớp
MediaTypeHeaderValue
để chỉ định tiêu đề loại nội dung. (Nó hiện một số kiểm chứng thực và có một API cho thêm các thông số phụ như charset)
Vì vậy, các hành động tương tự sẽ trông như thế:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
Response.ContentType = new MediaTypeHeaderValue("application/json").ToString();
await Response.WriteAsync(jsonString, Encoding.UTF8);
}
Trong trường hợp nghi ngờ bạn có thể luôn luôn có một cái nhìn tại triển khai ContentResult
và/hoặc JsonResult
.
Nguồn
2015-10-17 12:35:53
Cảm ơn câu trả lời của bạn. Điều gì về cài đặt trình định dạng json? chúng ta có thể làm theo cùng một mẫu như trước khi chúng ta chỉ định các thiết lập định dạng trong lớp khởi động không? –
Phụ thuộc vào việc định dạng sử dụng của bạn, nhưng nếu bạn xem xét việc thực hiện JsonResult, bạn sẽ thấy chúng sử dụng 'context.HttpContext.RequestServices.GetRequiredService>()'. Điều này có nghĩa là chúng cho phép bạn xác định các tùy chọn trong thùng chứa DI được xây dựng (có thể trong lớp khởi động) và các tùy chọn đó sẽ được sử dụng trong quá trình định dạng. Vì bạn không muốn sử dụng được xây dựng trong 'JsonResult', bạn có thể thực hiện một cái gì đó của riêng bạn sau cùng một ý tưởng. –
bạn có nghĩa là tôi định dạng json của tôi trước khi tôi sử dụng nó trong writeAsync? tất nhiên định dạng nó với các thiết lập mà tôi có thể nhận được từ DI –