.net core .net core如何将内容范围添加到标题

.net core .net core如何将内容范围添加到标题,.net-core,odata,.net Core,Odata,我不知道如何将内容范围添加到odata请求的标题中。My api需要这样的格式进行分页: Content-Range: posts 0-24/319 我能找到的最接近HTTP字节范围的支持。从这里开始: . OP说将会有一篇关于[Queryable]的帖子,它应该会增加对分页的支持,但是我还没有看到任何关于这方面的信息 [EnableQuery] [ODataRoute] public IActionResult Get(ODataQueryOp

我不知道如何将内容范围添加到odata请求的标题中。My api需要这样的格式进行分页:

Content-Range: posts 0-24/319
我能找到的最接近HTTP字节范围的支持。从这里开始: . OP说将会有一篇关于[Queryable]的帖子,它应该会增加对分页的支持,但是我还没有看到任何关于这方面的信息

        [EnableQuery]
        [ODataRoute]
        public IActionResult Get(ODataQueryOptions<HC_PortalActivity> 
         options)
        {

            return Ok(Db.HC_PortalActivity_Collection);
        }
[启用查询]
[ODataRoute]
公共IActionResult获取(ODataQueryOptions)
选项)
{
返回Ok(Db.HC\u PortalActivity\u Collection);
}

您可以将
内容范围
标题添加到
HttpRequest.Content
对象:

request.Content.Headers.ContentRange = new System.Net.Http.Headers.ContentRangeHeaderValue(0, 24, 319);

request.Content.Headers.ContentRange.Unit = "posts";
请记住设置
单位
,否则它将默认为“字节”

编辑

Content
属性仅在
HttpRequestMessage
类中可用,而在
HttpRequest
类中不可用。因此,您需要创建一个可以访问
ContentRange
属性的文件

var request = new HttpRequestMessage();
... // as above
假设您正在使用
HttpClient
发送请求,您可以通过
sendsync
方法传递请求

var httpClient = new HttpClient();
... // other setup

httpClient.SendAsync(request);

以下是我最后做的:

  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);
        }
公共静态void IncludeContentRange(ODataQueryOptions选项,HttpRequest上下文)
{
var range=options.Request.Query[“range”][0]。替换(“[”,”).Replace(“]”,”).Split(“,”);
var q=从x到Db.HC\u PortalActivity\u集合
选择x;
var headerValue=string.Format(“{0}{1}-{2}/{3}”,options.Context.NavigationSource.Name.ToLower(),range[0],range[1],q.Count());
Add(“访问控制公开标题”,“内容范围”);
context.HttpContext.Response.Headers.Add(“内容范围”,headerValue);
}

这是否适用于.net core我在访问HttpRequest.content时遇到问题道歉。该属性位于HttpRequestMessage类(不是HttpRequest类)上,因此您需要为消息创建其中一个属性。我已更新我的答案以添加此标题。我已更新我的问题以包括我的控制器操作的外观。请解释您尝试添加标题的位置?在它到达控制器方法之前?到目前为止你试过什么?