C# 是否有任何方法可以隐藏查询字符串,使其不显示在使用asp.net MVC的搜索和筛选中

C# 是否有任何方法可以隐藏查询字符串,使其不显示在使用asp.net MVC的搜索和筛选中,c#,asp.net-mvc,search,query-string,querystringparameter,C#,Asp.net Mvc,Search,Query String,Querystringparameter,我实现了一个基本的排序-带有排序的过滤 控制器中的索引代码 public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page) { ViewBag.CurrentSort = sortOrder; ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ?

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

控制器中的索引代码

 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 university(Microsoft demo)做的一个演示,在这个上下文中,我不需要隐藏查询字符串,但在另一个上下文中(使用ado.net存储过程),可以显示一些数据库体系结构-

  • 并非每个查询字符串都会导致安全漏洞。您必须定义哪些敏感数据不应显示在查询字符串上
  • 如果你想隐藏,你需要使用“POST”而不是“GET”。然而,使用诸如Fiddler或浏览器调试工具之类的包嗅探工具,查询参数仍然是可以发现的
  • 如果您只是在代码中构造SQL语句,请注意SQL注入。例如,有人可能会将“drop table xx”作为查询字符串传递
  • 查询字符串可以加密-

  • 你想过使用带有字符串的模型绑定器吗?你可以在页面加载后通过jQuery删除查询字符串的额外部分。如果有任何代码片段或代码可以遵循,那么这将是一个很好的起点,谢谢。你到底想“隐藏”它吗?用户在文本框中键入“a”,以便在另一个上下文(使用ado.net存储过程)中的查询字符串中预期它会显示一些数据库体系结构,从而无需任何理由就获得了downvote。但是,我希望我的努力能对某人有所帮助。我感谢你的努力,我没有否决你的答案。因为这对我有帮助,所以我将其否决,使其等于否决。查询字符串是用户在文本框中键入的值-它没有任何“敏感”之处。OP不能使用POST。这里不涉及“SQL注入”(使用EF)。加密它毫无意义(而且无论如何也不可能)。您在此处所述与OP的问题无关。@StephenMuecke他根据此处的答案更新了问题,请随意分享我不知道的内容;)OP无法“隐藏”查询字符串-如果是,则该值将不会发送到服务器,并且控制器方法将不起作用。为什么OP认为他们会这么做毫无意义。