【问题标题】:IHttpActionResult and helper methods in ASP.NET CoreASP.NET Core 中的 IHttpActionResult 和辅助方法
【发布时间】:2015-08-11 06:35:14
【问题描述】:

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

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

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

startup.cs 中似乎不再存在的HttpConfiguration 怎么样?

【问题讨论】:

  • 虽然MVC 6中有WebApiComatShim包用于这种可移植性场景,但建议不要使用它,所以我建议使用新的MVC 6做事方式。
  • 关于 HttpConfiguration,你有没有看过新的 Startup.cs 长什么样子?你能试着把它移到那里吗?
  • 新的 mvc 6 执行此操作的方式 ... 好的,但是 return Ok(mydata) 等效于 return new ObjectResult(mydata) { StatusCode = 200 }; ?
  • 对于httpconfiguration,我会尝试做其他谢谢
  • 是的,Ok 的内容似乎很好(在这种情况下,您无需显式设置状态码……它应该默认为 200)……您可以编写自己的基础使用这些辅助方法的控制器,因此您无需在多个控制器中更改它...

标签: asp.net-web-api owin asp.net-core


【解决方案1】:

IHttpActionResult 现在实际上是IActionResult,要返回带有返回对象的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

【讨论】:

  • 他不应该使用return Ok("value" + id) 吗? Ok() 仍然存在,似乎是表示来自 API 的 200-Ok 响应的合理方式。
  • @CesarD 是的,在最新版本中,它已回到 NotFoundOk 等。
  • 微软不能在线保存自己的文档真是太可惜了。该 URL 现在重定向到(一个?)ASP.NET 主页。
【解决方案2】:

更新了回复

我看到有人在评论中引用了WebApiCompatShim

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

我看到 Microsoft.AspNetCore.OData 1.0.0-rtm-00011 具有 WebApiCompatShim 作为依赖项。我不知道他们在这个领域想要达到什么目标,这些只是事实。

如果您不打算获得另一个兼容性包并且正在研究更多的重构工作,您可以查看以下方法:WebApiCompatShim - how to configure for a REST api with MVC 6

您仍然可以使用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);
}

【讨论】:

    【解决方案3】:

    在 2.2 中,ASP.NET Core 迁移指南声明将 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()
          }
      });
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      相关资源
      最近更新 更多