Подтвердить что ты не робот

Методы IHttpActionResult и помощника в ядре ASP.NET

Я пытаюсь перенести проект web api 2 на ASP.NET 5. Но у меня много элементов, которых больше нет.

Например, методы IHttpActionResult или Ok(), NotFound(). Или RoutePrefix []

Должен ли я изменить каждый IHttpActionResult на IActionResult? Измените Ok() на new ObjectResult? (это то же самое?)

Как насчет HttpConfiguration, который больше не присутствует в startup.cs?

4b9b3361

Ответ 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 было удалено, чтобы не быть слишком подробным. HttpOkObjectResultOkObjectResult

[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()
                    }
                });
}