我没有运气找到如何将Content-Range添加到我的odata请求的标头中。我的api需要这样的分页格式:
Content-Range: posts 0-24/319
我能找到的最接近的东西是HTTP字节范围支持。从这里: https://blogs.msdn.microsoft.com/webdev/2012/11/23/asp-net-web-api-and-http-byte-range-support/。 OP表示将撰写有关[Queryable]的帖子,该帖子应该增加对分页的支持,但是我还没有看到任何有关此的信息。
[EnableQuery]
[ODataRoute]
public IActionResult Get(ODataQueryOptions<HC_PortalActivity>
options)
{
return Ok(Db.HC_PortalActivity_Collection);
}
答案 0 :(得分:1)
您可以将Content-Range
标头添加到HttpRequest.Content
对象:
request.Content.Headers.ContentRange = new System.Net.Http.Headers.ContentRangeHeaderValue(0, 24, 319);
request.Content.Headers.ContentRange.Unit = "posts";
请记住要设置Unit
,否则它将默认设置为'bytes'
编辑
Content
属性仅在HttpRequestMessage
类上可用,而在HttpRequest
类上不可用。因此,您将需要创建一个人才能访问ContentRange
属性。
var request = new HttpRequestMessage();
... // as above
假设您正在使用HttpClient
发送请求,则可以通过SendAsync
方法传递请求
var httpClient = new HttpClient();
... // other setup
httpClient.SendAsync(request);
答案 1 :(得分:0)
这就是我最终要做的事情:
public static void IncludeContentRange<T>(ODataQueryOptions<T> options, HttpRequest context)
{
var range = options.Request.Query["range"][0].Replace("[", "").Replace("]", "").Split(',');
var q = from x in Db.HC_PortalActivity_Collection
select x;
var headerValue = string.Format("{0} {1}-{2}/{3}", options.Context.NavigationSource.Name.ToLower(), range[0], range[1], q.Count());
context.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Range");
context.HttpContext.Response.Headers.Add("Content-Range", headerValue);
}