首页 > 解决方案 > 在路径中使用 DateTime 和 Double 变量进行 Web api 搜索

问题描述

我正在开发一个 web api,我需要能够使用 a 搜索路径DateTime并接收包含它的所有书籍Date

因此,例如 /api/books/published/2012返回日期为 2012 的所有内容。以及api/books/published/2012/8/15在他们的 2012-08-15 中返回所有内容。

我努力了

 public ActionResult GetBooksSortedByDate()
    {
        if (!_bookList.Any())
            return NotFound();
        return Ok(_bookList);
    }
    [HttpGet("published/{published}")]
    public IActionResult GetBookByDate(DateTime published)
    {
        var book = FindBookByDate(published);
        if (book is null) return NotFound();
        return Ok(book);
    }
    //returnerar böcker innehållandes sökt datum
    private IEnumerable<Book> FindBookByDate(DateTime published)
    {
        return _bookList.Where(_bookList => _bookList.Publish_date.Equals(published));
    }

/api/books/published/2012-8-15在 Postman 中使用让我得到了当时创建的书。

同时/api/books/published/2012不给我任何对象。我知道这是因为我已经设置了_booklist.Publish_date.Equals(published));.

那么我需要用什么来替换.Equals才能得到类似的东西.Contains(Value)

关于双

我希望能够做到以下几点。

/api/books/price/30.0&35.0 returns all with price between '30.0' och '35.0'

同样的情况,我得到了结果,/api/books/price/33.0但我不知道如何在 30.0 和 35.0 之间进行价格计算。

我的代码看起来像这样。我相信我需要在这里发送 2 个双打来检查它们?

  //Visar /price/value&value
    [HttpGet("price/{price}&{price}")]
    public IActionResult GetBooksByTwoPrices(double firstPrice, double secondPrice)
    {
        var book = FindBooksByTwoPrices(firstPrice,secondPrice);
        if (book is null) return NotFound();
        return Ok(book);
    }
    
    private IEnumerable<Book> FindBooksByTwoPrices(double firstPrice, double secondPrice)
    {
        var allBooksBetweenPrices = _bookList.Where(_bookList => _bookList.Price.Equals(firstPrice) && _bookList.Price.Equals(secondPrice);
        return allBooksBetweenPrices;
        //return _bookList.Where(_bookList => _bookList.Price.Equals(price));
    }

我知道我的var allBooksBetweenPrices = ...不起作用,因为它不能一次是 2 个值,但我想这有点接近它的方法?

值得注意... 我的Book.cs仅包含 public double price { get; set; }我是否需要另一个来检查其他价格?

标签: c#asp.netjson

解决方案


对于你问题的第一部分,我建议如下:

_bookList.Where(_bookList => _bookList.Publish_date.ToString("yyyy-MM-dd").Contains(published));

对于第二部分,您可以执行以下操作:

var allBooksBetweenPrices = _bookList.Where(_bookList => (_bookList.Price >= firstPrice) && (_bookList.Price <= secondPrice));

推荐阅读