2013-05-31 21 views
17

Tôi đã tự hỏi điều này trong một thời gian, tốt hơn là luôn luôn trả lại trang web bằng cách sử dụng trang web asp.net mvc api mvc?Có tốt hơn khi luôn trả lại HttpResponseMessage trong Web Api?

Khi tôi tải lên các dự án WebAPI mặc định tôi thấy họ không sử dụng nó trong bộ điều khiển mẫu

// GET api/values 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 

     // GET api/values/5 
     public string Get(int id) 
     { 
      return "value"; 
     } 

Tôi nghĩ HttpResponseMessage kết thúc tốt đẹp mọi thứ xung quanh và làm cho nó một yêu cầu Http tốt. Nếu điều này đúng thì lợi ích của việc không chỉ sử dụng nó là gì?

+1

Đó là công việc nhiều hơn. – SLaks

+0

Do dòng bổ sung Request.CreateResponse (HttpStatusCode.OK, "value"); ??? – chobo2

+4

Chính xác. Nếu bạn không cần phải tùy chỉnh phản hồi HTTP, nó đẹp hơn để gắn bó với mã đơn giản hơn như mẫu trong câu hỏi của bạn. – SLaks

Trả lời

17

Tôi luôn trả lại HttpResponseMessage. Điểm của Web API là có thể hiển thị api HTTP. Giả sử rằng bạn đang trả về một đối tượng và sau đó dựa vào đường dẫn khung công tác để chuyển đổi đối tượng thành một HTTPResponseMessage chỉ che khuất mục đích IMO.

Tôi tự tin rằng nếu bạn trả thêm chi phí phía trước để tự tạo HttpResponseMessage, bạn sẽ hiểu rõ hơn về cách API Web thực sự hoạt động. Bạn sẽ gặp phải ít vấn đề hơn vì bạn có nhiều khả năng tránh Web API làm điều gì đó mà bạn không mong đợi. Bạn sẽ có nhiều khả năng tận dụng các khả năng của HTTP vì các tiêu đề ở ngay đó để bạn truy cập.

+0

Tương tự, tôi luôn trả về HttpResponseMessage nhưng lại tự hỏi tại sao người khác lại chọn không như những gì tôi nhớ là nó tạo một yêu cầu HTTP hợp lệ với tất cả các tiêu đề và nội dung. – chobo2

+0

@ chobo2 Nhưng không có cách nào ảnh hưởng trực tiếp đến tiêu đề http. Bạn cần phải tạo một ActionFilter cho bất kỳ kịch bản nào mà bạn muốn chạm vào các tiêu đề. –

+1

Tôi cũng sẽ đề nghị điều này. Chúng tôi bắt đầu với một khuôn khổ khoảng 8 tháng trước, và một vài tháng trở lại nhận ra nó tốt hơn bao nhiêu với HttpResponseMessage. Ví dụ: (trong số các lý do chính đáng khác), nó cho phép bạn cung cấp "ReasonPhrase" trên phản hồi của bạn, vì vậy bạn có thể chính xác hơn nếu bạn trả về "BadRequest". –

3

Để tách các mối quan ngại tại sao không có lớp dịch vụ (các phương thức được nhập mạnh trong thư viện lớp) và lớp webservice (ASP.NET WEB API).
Lớp dịch vụ có thể dễ dàng được tiêu thụ bởi Winform, WPF, Console và các dự án thử nghiệm không phụ thuộc vào Http và cũng có thể được hiển thị dưới dạng webservice bởi ASPNET WebAPi ví dụ cho ứng dụng di động và/hoặc javascript.
Mối quan tâm của lớp Webservice là hiển thị lớp dịch vụ với các mối quan tâm http (tiêu đề, loại nội dung, trạng thái http ..) để bạn có thể trả về HttpResponseMessage.
Điều này cũng làm cho bộ điều khiển thực sự mỏng và bạn có thể tiêm dịch vụ với DI

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