2012-09-24 42 views
32

Trong một trong các yêu cầu Nhận của tôi, tôi muốn trả lại một HttpResponseMessage với một số nội dung. Hiện tại tôi có nó hoạt động như sau:API Web: Nội dung trong HttpResponseMessage

var header = new MediaTypeHeaderValue("text/xml"); 
Request.CreateResponse(HttpStatusCode.OK, myObject, header); 

Tuy nhiên, vì tôi đang sử dụng Yêu cầu tĩnh, điều này trở nên thực sự khó kiểm tra. Từ những gì tôi đã đọc, tôi có thể thực hiện những việc sau:

return new HttpResponseMessage<T>(objectInstance); 

Tuy nhiên, dường như không thể thực hiện việc này. Có phải vì tôi đang sử dụng phiên bản WebApi/.NET cũ hơn không?


Trên một mặt lưu ý, tôi phát hiện ra rằng bạn có khả năng có thể tạo ra một phản ứng như sau:

var response = new HttpResponseMessage(); 
response.Content = new ObjectContent(typeof(T), objectInstance, mediaTypeFormatter); 

gì bối rối với tôi là tại sao tôi phải để thêm một mediaTypeFormatter đây. Tôi đã thêm trình định dạng loại phương tiện ở cấp global.asax.

Cảm ơn!

+0

Bạn phải vượt qua các định dạng bởi vì nếu không ObjectContent sẽ cần phải sử dụng một thành viên tĩnh để truy cập bộ sưu tập toàn cầu, trong đó sẽ thực hiện kiểm tra khó khăn hơn. –

+0

Yêu cầu không phải là tĩnh, nó là một thành viên thể hiện của ApiController. –

Trả lời

60

HttpResponseMessage<T> đã bị xóa sau phiên bản Beta. Ngay bây giờ, thay vì gõ ObjectContent

Nếu bạn tạo thủ công HttpResponseMessage bằng cách sử dụng hàm tạo tham số mặc định của nó, không có ngữ cảnh yêu cầu để thực hiện thương lượng nội dung - đó là lý do bạn cần xác định trình định dạng hoặc thực hiện đàm phán nội dung bằng tay.

Tôi hiểu bạn không muốn làm điều đó - vì vậy sử dụng này để thay thế:

HttpResponseMessage response = Request.CreateResponse<MyObject>(HttpStatusCode.OK, objInstance); 

Điều đó sẽ tạo ra các thông điệp phản ứng dựa vào quá trình đàm phán nội dung thực hiện đối với các yêu cầu.

Cuối cùng, bạn có thể đọc thêm về đàm phán nội dung ở đây On this link

+4

Tôi bỏ lỡ HttpResponseMessage , tôi nghĩ rằng đó là một API tốt hơn, nhưng Request.CreateResponse hoạt động tốt. – Hugo

+3

Hãy nhớ rằng bất kỳ phương pháp điều khiển nào sử dụng 'HttpResponseMessage' là rất khó để kiểm tra đơn vị, vì vậy tốt nhất nên tránh sử dụng nó nếu bạn có thể. –

+7

@RoyDictus Tôi tò mò là tại sao nó làm cho thử nghiệm đơn vị khó khăn, bạn có thể xây dựng xin vui lòng? –

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