我试图将我的web api 2项目移动到ASP.NET 5。 但是我有许多不再存在的元素。
例如IHttpActionResult
或Ok(), NotFound()
方法。
或RoutePrefix
[]
我应该使用IHttpActionResult
更改每个IActionResult
吗?
使用Ok
更改new ObjectResult
()? (它是一样的吗?)
在startup.cs中似乎不再存在HttpConfiguration
怎么办?
答案 0 :(得分:62)
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
答案 1 :(得分:5)
更新了回复
我看到有人在评论中引用了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);
}
答案 2 :(得分:0)
At 2.2, the asp.net core migration guide state to replace IHttpActionResult with ActionResult. This works for me:
[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()
}
});
}