Методы IHttpActionResult и помощника в ядре ASP.NET
Я пытаюсь перенести проект web api 2 на ASP.NET 5.
Но у меня много элементов, которых больше нет.
Например, методы IHttpActionResult
или Ok(), NotFound()
.
Или RoutePrefix
[]
Должен ли я изменить каждый IHttpActionResult
на IActionResult
?
Измените Ok
() на new ObjectResult
? (это то же самое?)
Как насчет HttpConfiguration
, который больше не присутствует в startup.cs?
Ответы
Ответ 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
Ответ 2
Обновлен ответ-ish
Я видел, что кто-то ссылался на WebApiCompatShim
в комментарии.
WebApiCompatShim
по-прежнему поддерживается для такого рода сценариев переносимости, и теперь он выпущен 1.1.0.
Я видел, что Microsoft.AspNetCore.OData 1.0.0-rtm-00011
имеет WebApiCompatShim
как зависимость. Я не знаю точно, чего они пытаются достичь в этой области, это всего лишь факты.
Если вы не получаете другой пакет совместимости, и вы смотрите на более рефакторинговую работу, вы можете посмотреть на следующий подход: WebApiCompatShim - как настроить для REST api с 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
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()
}
});
}