2016-10-04 111 views
5

我正在开发使用.NET Core的ASP.NET Web API。这个Web API将主要由UI应用程序访问(UI将使用ASP.NET Core MVC开发),但将来的API也可以由其他应用程序访问。WEB API操作方法的返回类型应该是什么?

在我的WEB API中,所有的方法都是异步的。

如果我想客户做内容协商那么应该是什么API操作方法的返回类型Task<IActionresult>Task<SomePOCO>

如果我想的方法来始终以JSON格式返回数据,那么应该是什么的返回类型API操作方法?应该是Task<IActionResult>还是Task<JsonResult>Task<SomePOCO>,因为我认为所有3个都可以工作,所以不确定哪个适合在这里?

+0

请不要强制标签问题标题http://stackoverflow.com/help/tagging – Tseng

回答

6

如果我想[的]客户做内容协商那么应该是什么API操作方法的返回类型?

要做内容协商,请返回Task<ObjectResult>Task<MyPoco>

该框架自动将POCO包装在ObjectResult;因此,这两个选项都是相同的,并且两者都将遵循HTTP Accept标题。您还将通过返回实现ObjectResult的任何结果(例如OkObjectResult)来获得内容协商。

如果我想[的]方法总是JSON返回数据格式,那么应该是什么API操作方法[中]返回类型?

要始终返回JSON,请返回Task<JsonResult>(或使用[Produces]过滤器)。

参见:https://docs.asp.net/en/latest/mvc/models/formatting.html#content-negotiation

[S] O我假定然后IActionResult仅用于MVC控制器?

IActionResult所有结果,一个Controller回报的合同。如果您的动作的签名具有IActionResult返回类型,那么您的动作的方法体可以为return任何结果类型,因为它们都实现了IActionResult接口。这是继承层次结构。

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 

参见:https://github.com/aspnet/Mvc/tree/dev/src/Microsoft.AspNetCore.Mvc.Core

+0

所以我假设然后IActionResult只用于MVC控制器? – LP13

+0

@ LP13'IActionResult'是顶级界面。大部分(如果不是全部的话)实现'IActionResult'。查看修改。 –

相关问题