ASP.NET Core 中的 IHttpActionResult 和辅助方法

IHttpActionResult and helper methods in ASP.NET Core

我正在尝试将我的网站 api 2 项目移动到 ASP.NET 5。 但是我有很多元素已经不存在了。

例如 IHttpActionResultOk(), NotFound() 方法。 或者 RoutePrefix[]

我应该将每个 IHttpActionResult 更改为 IActionResult 吗? 将 Ok() 更改为 new ObjectResult ? (是一样的吗?)

startup.cs 中似乎不再存在的 HttpConfiguration 呢?

IHttpActionResult 现在实际上是 IActionResult,对于 return 一个带有 return 对象的 Ok,您将使用 return new ObjectResult(...);

如此有效,就像这样:

public IActionResult Get(int id)
{
    if (id == 1) return HttpNotFound("not found!");
    return new ObjectResult("value: " + id);
}

这是一篇更详细的好文章:

http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6

已更新回复

我看到有人在评论中提到了 WebApiCompatShim

WebApiCompatShim 仍然针对这种可移植性场景进行维护,现已发布 1.1.0。

我看到 Microsoft.AspNetCore.OData 1.0.0-rtm-00011WebApiCompatShim 作为依赖项。我不知道他们在这方面到底想达到什么目的,这些只是事实。

如果您不想获得另一个兼容包,并且正在研究更多的重构工作,您可以查看以下方法:

您仍然可以使用 Ok() 或者您可以尝试使用 OkObjectResult() 方法,因为 Http 词已被删除,以免过于冗长。 HttpOkObjectResult -> OkObjectResult

[HttpPost]
public ObjectResult Post([FromBody]string value)
{
    var item = new {Name= "test", id=1};
    return new OkObjectResult(item);
}


[HttpPost]
public ObjectResult Post([FromBody]string value)
{
    var item = new {Name= "test", id=1};
    return Ok(item);
}

在 2.2 中,ASP.NET 核心迁移指南指出要用 ActionResult 替换 IHttpActionResult。这对我有用:

[Produces("application/json")]
[HttpPost]
public ActionResult GetSomeTable([FromBody] GridState state)
{
  return Ok(new
  {
    data = query.ToList(),
    paging = new
      {
        Total = total,
        Limit = state.limit,
        page = state.page,
        Returned = query.Count()
      }
  });
}