Contains()无法处理ASP.NET MVC应用程序中包含正斜杠的查询字符串



我正在尝试在我的网站上实现一个可以按日期搜索的搜索功能。这是一个通配符搜索,意味着用户可以输入任何内容,它将搜索数据库中的多个字段。

一个示例URL是testsite.com/Note/SearchNotes?searchquery=6/27。我在数据库中的DateCreated列中有一条值为6/27/2022 5:44:24 PM的记录。

public ActionResult SearchNotes(string searchquery)
{
    var test = db.Notes.Where(Note => Note.DateCreated.ToString().Contains(searchquery) 
    || /* check more properties */).ToList(); //returns 0
}

我的问题是,当查询字符串(如"6/27"(包含正斜杠时,它不会返回任何数据。像"27"这样的字符串确实会返回数据。我相信/是一个法律角色,所以我不明白为什么我会面临这个问题。

一个观察结果:它可能与ToString()有关,因为正斜杠正在返回已经属于string类型的属性的数据。

有人能解释一下这种行为的原因吗?还是更好的解决方案?

DateTime.TryParse(@"6/27/2022 5:44:24 PM", out var dateCreated);
var notes = new List<string>
{
  @"testsite.com/Note/SearchNotes?searchquery=6/27"
  , @"Some Other Data"
  , @"someOtherNote containing 27..."
  , dateCreated.ToString()
  , dateCreated.ToString("yyyy/MM/dd")
  , dateCreated.ToString("MM/dd/yyyy")
  , dateCreated.ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture)
};
Console.WriteLine("test1");
var test = notes.Where(note => note.Contains("27")).ToList();
foreach (var result in test)
  Console.WriteLine(result);;
Console.WriteLine();
Console.WriteLine("test2");
var test2 = notes.Where(note => note.Contains("/27")).ToList();
foreach (var result in test2)
  Console.WriteLine(result);

产生

test1
testsite.com/Note/SearchNotes?searchquery=6/27
someOtherNote containing 27...
2022-06-27 17:44:24
2022-06-27
06-27-2022
06/27/2022
test2
testsite.com/Note/SearchNotes?searchquery=6/27
06/27/2022

我认为这回答了你的问题。DateTime格式、区域性、机器和用户区域环境设置/本地化都是一门黑暗的艺术,为了确保通过字符串匹配找到日期(部分(,必须确保匹配格式。

注意,即使是显式格式";MM/dd/yyyy";产生格式化的输出";MM-dd-yyyy";直到我指定了CultureInfo.InvariantCulture

相关内容

  • 没有找到相关文章

最新更新