2016-10-04 13 views
5

Tôi đang phát triển ASP.NET Web API bằng .NET Core. Web API này sẽ được truy cập chủ yếu bởi ứng dụng UI (UI sẽ được phát triển bằng ASP.NET Core MVC) nhưng trong tương lai API cũng có thể được truy cập bởi các ứng dụng khác.Loại trả về của Phương thức hành động API WEB là gì?

Trong API WEB của tôi, tất cả các phương pháp đều không đồng bộ.

Nếu tôi muốn khách hàng để làm đàm phán nội dung sau đó những gì nên là kiểu trả về của phương thức action API Task<IActionresult> hoặc Task<SomePOCO>

Nếu tôi muốn phương pháp để luôn trả lại dữ liệu ở định dạng JSON sau đó những gì cần được kiểu trả về của Phương thức hành động API? Có nên là Task<IActionResult> hoặc Task<JsonResult> hoặc Task<SomePOCO> vì tôi nghĩ rằng cả 3 sẽ hoạt động để không chắc chắn cái nào phù hợp ở đây?

+0

Vui lòng không buộc thẻ vào tiêu đề câu hỏi http://stackoverflow.com/help/tagging – Tseng

Trả lời

6

Nếu tôi muốn [các] khách hàng để làm đàm phán nội dung sau đó những gì nên là kiểu trả về của phương thức action API?

Để thực hiện thương lượng nội dung, hãy trả lại Task<ObjectResult> hoặc Task<MyPoco>.

Khuôn khổ tự động bao bọc POCO trong một ObjectResult; do đó, cả hai tùy chọn đều tương đương và cả hai đều tuân theo tiêu đề HTTP Accept. Bạn cũng sẽ nhận được thương lượng nội dung bằng cách trả lại bất kỳ kết quả nào triển khai ObjectResult, chẳng hạn như OkObjectResult.

Nếu tôi muốn [các] phương pháp để luôn trả lại dữ liệu trong JSON định dạng sau đó những gì cần được [các] kiểu trả về của phương thức action API?

Để luôn trả về JSON, trả lại Task<JsonResult> (hoặc sử dụng bộ lọc [Produces]).

Xem thêm: https://docs.asp.net/en/latest/mvc/models/formatting.html#content-negotiation

[S] o Tôi giả định sau đó IActionResult chỉ được sử dụng cho điều khiển MVC?

IActionResult là hợp đồng cho tất cả kết quả mà một Controller lợi nhuận. Nếu chữ ký của hành động của bạn có loại trả về IActionResult thì nội dung phương thức của hành động của bạn có thể là return bất kỳ loại kết quả nào, vì tất cả đều thực hiện giao diện IActionResult. Đây là hệ thống phân cấp thừa kế.

IActionResult 
    ActionResult 
    ChallengeResult 
    ContentResult 
    EmptyResult 
    FileResult 
     FileContentResult 
     FileStreamResult 
     PhysicalFileResult 
     VirtualFileResult 
    ForbidResult 
    LocalRedirectResult 
    ObjectResult 
     CreatedAtActionResult 
     CreatedAtRouteResult 
     CreatedResult 
     BadRequestObjectResult 
     NotFoundObjectResult 
     OkObjectResult 
    RedirectResult 
    RedirectToActionResult 
    RedirectToRouteResult 
    SignInResult 
    SignOutResult 
    StatusCodeResult 
     NoContentResult 
     NotFoundResult 
     OkResult 
     UnauthorizedResult 
     UnsupportedMediaTypeResult 
     BadRequestResult 

Xem thêm: https://github.com/aspnet/Mvc/tree/dev/src/Microsoft.AspNetCore.Mvc.Core

+0

vì vậy tôi giả định sau đó IActionResult chỉ được sử dụng cho bộ điều khiển MVC? – LP13

+0

@ LP13 'IActionResult' là giao diện cấp cao nhất. Hầu hết nếu không phải tất cả các kết quả đều thực hiện 'IActionResult'. Xem chỉnh sửa. –

1

Có một cái nhìn tại vênh vang: https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger Nó tốt hơn để xác định thuộc tính ProducesResponseType cho phương pháp:

[ProducesResponseType(typeof(TodoItem), 201)] 
public IActionResult Create([FromBody, Required] TodoItem item) 

Vì vậy mà tự động tạo ra tài liệu vênh vang để hiển thị thực tế trả về dữ liệu cho phương thức.

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