c# - C# 获取请求标头并返回实体的排序列表
问题描述
再次发布,因为我无法访问我的初始堆栈溢出帐户。最初的问题张贴在这里。对于造成的任何不便,我提前道歉。
如何读取请求标头?我想查找并阅读一个键,说“排序”,如果它是真的,我会返回所有书籍/实体的排序版本。我也不确定如何返回已排序的实体。我知道这看起来很奇怪,但它是我的分配规范的一部分,否则我会使用该[FromRoute]
属性从 URL 中获取一个参数。这似乎对我不起作用。这是另一个不起作用的老问题,因为我无法将请求标头键与字符串或空值进行比较。这是我当前的代码:
// 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();
TryGetValue
您要编写and的原因TryParse
是要避免exceptions
该值是missing/null
或该值不是 a 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();
编辑(添加邮递员请求示例):
推荐阅读
- android - 如何在多个 iOS 模拟器中运行 Flutter
- date - 用户正在获取字符串长度小于 0 或不是整数。详细信息:BI 启动板中的 errorKind 其他用户可以运行报告
- android - 如何使用cpio修改或创建ramdisk?
- angular - 根据当前窗口位置动态设置组件的 styleUrls
- javascript - 如何解决 fetch return Unexpected token U in JSON at position 0 at parse (
) 反应原生 - tbb - Wait for one node in a flow graph? / Pull-based execution?
- javascript - javascript, parse an html string and recognize parts
- javascript - Javascript – use X amount of object variables in if statement
- asp.net-mvc - Database recreated everytime Application runs
- python - Making a draft of tic-tac-toe