Asp.net web api ASP.NET核心中的IHttpActionResult和helper方法

Asp.net web api ASP.NET核心中的IHttpActionResult和helper方法,asp.net-web-api,owin,asp.net-core,Asp.net Web Api,Owin,Asp.net Core,我正在尝试将我的web api 2项目移动到ASP.NET 5。 但我有很多元素不再存在了 [Produces("application/json")] [HttpPost] public ActionResult GetSomeTable([FromBody] GridState state) { return Ok(new { data = query.ToList(), paging = new { Total = total,

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

[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()
      }
  });
}
例如
IHttpActionResult
Ok(),NotFound()
方法。 或
RoutePrefix
[]

[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()
      }
  });
}
我是否应该用
IActionResult
更改每个
IHttpActionResult
? 用
新的ObjectResult
更改
Ok
()?(是一样的吗?)

[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()
      }
  });
}

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

IHttpActionResult
现在有效地
IActionResult
,要使用返回对象返回
Ok
,可以使用
返回新的ObjectResult(…)

[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()
      }
  });
}
所以实际上是这样的:

public IActionResult Get(int id)
{
    if (id == 1) return HttpNotFound("not found!");
    return new ObjectResult("value: " + id);
}
[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()
      }
  });
}
下面是一篇更详细的好文章:

[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()
      }
  });
}

更新的回复信息

[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()
      }
  });
}
我看到有人在评论中引用了
WebApiCompatShim

[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()
      }
  });
}
WebApiCompatShim
仍然是为这种可移植性场景维护的,现在发布了1.1.0版

[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()
      }
  });
}
我看到
Microsoft.AspNetCore.OData 1.0.0-rtm-00011
WebApiCompatShim
作为依赖项。我不知道他们在这方面到底想做什么,这些只是事实

[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()
      }
  });
}
如果您不想获得另一个兼容性软件包,并且希望进行更多的重构工作,那么可以采用以下方法:

[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()
      }
  });
}
您仍然可以使用
Ok()
,或者在删除Http word时尝试使用
OkObjectResult()
方法,以免过于冗长
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);
}
[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()
      }
  });
}

在2.2版中,ASP.NET核心迁移指南规定将IHttpActionResult替换为ActionResult。这对我很有用:

[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()
      }
  });
}

尽管MVC 6中有一个
webapicomatshem
包用于此类可移植性场景,但建议不要使用它,因此我建议使用新的MVC 6方式。关于HttpConfiguration,您看过新的
Startup.cs
的外观了吗?你能试着把它移到那里吗?MVC6的新方法。。。ok,但是ReturnOK(mydata)是否等同于返回新的ObjectResult(mydata){StatusCode=200}?对于httpconfiguration,我将尝试执行其他操作。谢谢,您为
Ok
所做的一切似乎都很好(在这种情况下,您不需要显式设置状态代码……它应该默认为200)…您可以使用这些帮助器方法编写自己的基本控制器,这样您就不需要在多个控制器中更改它…他是否应该使用
返回Ok(“value”+id)
Ok()
仍然存在,似乎是表示API 200 Ok响应的合理方式。@CesarD yes在最新版本中,它又回到了
NotFound
Ok
等。微软不能在线保存自己的文档,真是太遗憾了。该URL现在重定向到(an?)ASP.NET主页。