C#获取请求标头并返回实体的排序列表 编辑添加了邮递员请求示例:

问题描述

由于我无法访问最初的堆栈溢出帐户而再次发布。最初的问题发布于here。不便之处,敬请原谅。

如何阅读请求标头?我想查找并阅读一个说“已排序”的键,如果是,则返回所有书籍/实体的已排序版本。我也不确定如何返回已排序的实体。我了解这似乎很奇怪,但这是我的分配规范的一部分,否则我将使用[FromRoute]属性从URL获取一个参数。 This似乎不适合我。 This是另一个旧问题,因为我无法将请求标头键与string或null进行比较,因此该问题也不起作用。这是我当前的代码:

// GET: api/Books
[HttpGet]
public async Task<ActionResult<IEnumerable<Book>>> GetAllBooks()
{
    if (Request.Headers["sorted"] == true)
    {


    }
    return await _context.Books.ToListAsync();
}

public class Book
{
    [Key]
    public long id { get; set; }
    public long libraryId { get; set; }
    public string title { get; set; }
    public string author { get; set; }
    public string description { get; set; }
}

编辑:添加了图书实体

解决方法

您可以这样实现:

if (Request.Headers.TryGetValue("sorted",out StringValues sortedValue) 
    && bool.TryParse(sortedValue,out bool isSorted))
{
     if(isSorted)
     {
          return await _context.Books.OrderByDescending(a => a.Id).ToListAsync();
     }
}

return await _context.Books.OrderBy(a => a.Id).ToListAsync();

您要写TryGetValueTryParse的原因是,如果值是exceptions或值不是missing/null,请避免使用boolean

,根据您的逻辑,您可以按ascending or descending的顺序对图书进行排序,也可以根据您想要的property对图书进行排序,例如:ID,标题,作者或发布日期...等。

或者为简单起见,您可以将支票更改为:


if (bool.TryParse(Request.Headers["sorted"],out bool isSorted) && isSorted){
     return await _context.Books.OrderByDescending(a => a.Id).ToListAsync();
}

return await _context.Books.OrderBy(a => a.Id).ToListAsync();

编辑(添加了邮递员请求示例):

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...