2015-10-16 13 views
12

Trong web api 2 chúng tôi sử dụng để làm điều này để có được một câu trả lời với nội dung chuỗi:Làm thế nào để tạo ra một bản tin đáp ứng và thêm chuỗi nội dung để nó trong ASP.NET 5/MVC 6

var response = Request.CreateResponse(HttpStatusCode.Ok); 
response.Content = new StringContent("<my json result>", Encoding.UTF8, "application/json"); 

thế nào có thể bạn đạt được điều tương tự trong ASP.NET 5/MVC 6 mà không sử dụng bất kỳ lớp dựng sẵn nào trong lớp như ObjectResult?

Trả lời

19

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.

+0

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? –

+1

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. –

+0

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 –

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