.net core как добавить Content-range в заголовок - PullRequest
0 голосов
/ 14 ноября 2018

Мне не повезло узнать, как добавить 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/.ОП говорит, что будет написано сообщение о [Queryable], в которое должна быть добавлена ​​поддержка подкачки, но я пока не вижу никакой информации по этому вопросу.

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

            return Ok(Db.HC_PortalActivity_Collection);
        }

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вот что я в итоге сделал:

  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);
        }
0 голосов
/ 14 ноября 2018

Вы можете добавить заголовок 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 '

EDIT

Свойство Content доступно только для класса HttpRequestMessage, но не для класса HttpRequest.Таким образом, вам нужно будет создать его, чтобы иметь доступ к свойству ContentRange.

var request = new HttpRequestMessage();
... // as above

Если вы используете HttpClient для отправки запроса, вы можете передать запрос в методе SendAsync

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

httpClient.SendAsync(request);
...