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。 但是我有很多元素已经不存在了。
例如IHttpActionResult
或Ok(), 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 是的,在最新版本中,它已回到 NotFound
、Ok
等。
微软不能在线保存自己的文档真是太可惜了。该 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 和辅助方法的主要内容,如果未能解决你的问题,请参考以下文章