2016-10-04 134 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'。查看修改。 –

相關問題