Asp.net web api ASP.NET核心中的IHttpActionResult和helper方法
我正在尝试将我的web api 2项目移动到ASP.NET 5。 但我有很多元素不再存在了Asp.net web api ASP.NET核心中的IHttpActionResult和helper方法,asp.net-web-api,owin,asp.net-core,Asp.net Web Api,Owin,Asp.net Core,我正在尝试将我的web api 2项目移动到ASP.NET 5。 但我有很多元素不再存在了 [Produces("application/json")] [HttpPost] public ActionResult GetSomeTable([FromBody] GridState state) { return Ok(new { data = query.ToList(), paging = new { Total = total,
[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()
}
});
}
例如IHttpActionResult
或Ok(),NotFound()
方法。
或RoutePrefix
[]
[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()
}
});
}
我是否应该用IActionResult
更改每个IHttpActionResult
?
用新的ObjectResult
更改Ok
()?(是一样的吗?)
[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()
}
});
}
那startup.cs中似乎不再存在的
HttpConfiguration
呢?IHttpActionResult
现在有效地IActionResult
,要使用返回对象返回Ok
,可以使用返回新的ObjectResult(…)代码>
[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()
}
});
}
所以实际上是这样的:
public IActionResult Get(int id)
{
if (id == 1) return HttpNotFound("not found!");
return new ObjectResult("value: " + id);
}
[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()
}
});
}
下面是一篇更详细的好文章:
[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()
}
});
}
更新的回复信息
[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()
}
});
}
我看到有人在评论中引用了WebApiCompatShim
[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()
}
});
}
WebApiCompatShim
仍然是为这种可移植性场景维护的,现在发布了1.1.0版
[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()
}
});
}
我看到Microsoft.AspNetCore.OData 1.0.0-rtm-00011
将WebApiCompatShim
作为依赖项。我不知道他们在这方面到底想做什么,这些只是事实
[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()
}
});
}
如果您不想获得另一个兼容性软件包,并且希望进行更多的重构工作,那么可以采用以下方法:
[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()
}
});
}
您仍然可以使用Ok()
,或者在删除Http word时尝试使用OkObjectResult()
方法,以免过于冗长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);
}
[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()
}
});
}
在2.2版中,ASP.NET核心迁移指南规定将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()
}
});
}
尽管MVC 6中有一个webapicomatshem
包用于此类可移植性场景,但建议不要使用它,因此我建议使用新的MVC 6方式。关于HttpConfiguration,您看过新的Startup.cs
的外观了吗?你能试着把它移到那里吗?MVC6的新方法。。。ok,但是ReturnOK(mydata)是否等同于返回新的ObjectResult(mydata){StatusCode=200}?对于httpconfiguration,我将尝试执行其他操作。谢谢,您为Ok
所做的一切似乎都很好(在这种情况下,您不需要显式设置状态代码……它应该默认为200)…您可以使用这些帮助器方法编写自己的基本控制器,这样您就不需要在多个控制器中更改它…他是否应该使用返回Ok(“value”+id)
Ok()
仍然存在,似乎是表示API 200 Ok响应的合理方式。@CesarD yes在最新版本中,它又回到了NotFound
、Ok
等。微软不能在线保存自己的文档,真是太遗憾了。该URL现在重定向到(an?)ASP.NET主页。