.net core .net core如何将内容范围添加到标题
我不知道如何将内容范围添加到odata请求的标题中。My api需要这样的格式进行分页:.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
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类)上,因此您需要为消息创建其中一个属性。我已更新我的答案以添加此标题。我已更新我的问题以包括我的控制器操作的外观。请解释您尝试添加标题的位置?在它到达控制器方法之前?到目前为止你试过什么?