有什么方法可以使用 asp.net MVC 隐藏查询字符串,使其不显示在搜索和过滤器中

is there any way to hide a query string from showing in search and filter using asp.net MVC

我实现了一个基本的排序——带排序的过滤

控制器中的索引代码

 public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
        {
            ViewBag.CurrentSort = sortOrder;
            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewBag.CurrentFilter = searchString;

            var students = from s in db.Students
                           select s;
            if (!String.IsNullOrEmpty(searchString))
            {
                students = students.Where(s => s.LastName.Contains(searchString)
                                       || s.FirstMidName.Contains(searchString));
            }
            switch (sortOrder)
            {
                case "name_desc":
                    students = students.OrderByDescending(s => s.LastName);
                    break;
                case "Date":
                    students = students.OrderBy(s => s.EnrollmentDate);
                    break;
                case "date_desc":
                    students = students.OrderByDescending(s => s.EnrollmentDate);
                    break;
                default:  // Name ascending 
                    students = students.OrderBy(s => s.LastName);
                    break;
            }

            int pageSize = 3;
            int pageNumber = (page ?? 1);
            return View(students.ToPagedList(pageNumber, pageSize));
        }

代码运行良好

我想问的是,有什么方法可以实现相同的代码,而无需向最终用户显示查询参数,如图所示。

是否可以使用诸如视图模型之类的东西隐藏此参数 - 表单集合或使用基于路由 - 这种使用查询字符串的方式是否存在与安全相关的任何问题 - 请注意,此示例只是我想使用 contoso 大学(Microsoft 演示)做的演示,并且可以肯定的是,在这种情况下,我不需要隐藏查询字符串,但在另一种情况下(使用 ado.net存储过程 ) 可以显示一些数据库架构 –

  1. 并非每个查询字符串都会导致安全漏洞。您必须定义不应在查询字符串中显示的敏感数据。
  2. 如果你想隐藏你需要使用 "POST" 而不是 "GET"。但是,使用Fiddler等包嗅探工具或浏览器的调试工具,仍然可以发现查询参数。
  3. 如果您只是在代码中构造 SQL 语句,请注意 SQL 注入。例如,有人可能会传递“; drop table xx;”作为查询字符串。
  4. 查询字符串可以加密 - https://www.aspsnippets.com/Articles/Encrypt-and-Decrypt-QueryString-Parameter-Values-in-ASPNet-using-C-and-VBNet.aspx