UrlUtil.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // <author></author>
  2. // <date></date>
  3. // <description></description>
  4. namespace ERP.Framework.Utils
  5. {
  6. public class UrlUtil
  7. {
  8. public static bool Match(string pattern, string path)
  9. {
  10. pattern = pattern.Replace("/", "\\"); // 将斜杠替换为反斜杠
  11. path = path.Replace("/", "\\");
  12. if (pattern.Contains("**"))
  13. {
  14. // 处理双星号通配符
  15. string[] patternParts = pattern.Split("**", StringSplitOptions.RemoveEmptyEntries);
  16. if (patternParts.Length == 1)
  17. {
  18. // 单个双星号,匹配任何路径
  19. return true;
  20. }
  21. else
  22. {
  23. // 多个双星号,需要按顺序匹配路径部分
  24. int lastIndex = -1;
  25. foreach (string patternPart in patternParts)
  26. {
  27. int index = path.IndexOf(patternPart, lastIndex + 1, StringComparison.OrdinalIgnoreCase);
  28. if (index == -1)
  29. {
  30. return false;
  31. }
  32. lastIndex = index + patternPart.Length;
  33. }
  34. return true;
  35. }
  36. }
  37. else
  38. {
  39. // 处理其他通配符
  40. string[] patternParts = pattern.Split('*', StringSplitOptions.RemoveEmptyEntries);
  41. int currentIndex = 0;
  42. foreach (string patternPart in patternParts)
  43. {
  44. int index = path.IndexOf(patternPart, currentIndex, StringComparison.OrdinalIgnoreCase);
  45. if (index == -1)
  46. {
  47. return false;
  48. }
  49. currentIndex = index + patternPart.Length;
  50. }
  51. return true;
  52. }
  53. }
  54. }
  55. }