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

Posted

技术标签:

【中文标题】ASP.NET Core 中的 IHttpActionResult 和辅助方法【英文标题】:IHttpActionResult and helper methods in ASP.NET Core 【发布时间】: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)……您可以编写自己的基础使用这些辅助方法的控制器,因此您无需在多个控制器中更改它... 【参考方案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()
      
  );

【讨论】:

以上是关于ASP.NET Core 中的 IHttpActionResult 和辅助方法的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core 中的静态文件

ASP.NET Core 2.0中的HttpContext

Asp.Net Core 中的静态文件

详解Asp.Net Core中的Cookies

ASP.NET Web API 与 ASP.NET Core 中的 URL 匹配差异

如何仅为 ASP.NET 5 (ASP.NET Core) 中的受保护操作添加令牌验证