用于检查querystring并在泛型处理程序中运行方法的循环

本文关键字:运行 方法 循环 程序 处理 querystring 检查 泛型 用于 | 更新日期: 2023-09-27 18:21:51

我有这个解决方案(有效),但我想知道是否有办法进行循环,检查方法名称是否已发布,以及是否已发布->运行该方法。当前代码:

if (HttpContext.Current.Request["FunctionName"] != null)
{
            switch (HttpContext.Current.Request["FunctionName"])
            {
                case "DoStuff":
                    DoStuff();
             //... etc

希望你明白这个想法,否则就不详细了。

提前感谢!

用于检查querystring并在泛型处理程序中运行方法的循环

您可以调用GetType().GetMethod(HttpContext.Current.Request["FunctionName"], new Type[]{}),它将返回您可以调用的MethodInfo。我不会这么做,原因有几个:

  1. do-whatever-The-user-tells-you的总体危险性足够高,即使保证这是在每个方法(包括继承的)都可以安全运行的类中完成的,我也宁愿更积极地分析潜在恶意用户的请求。

  2. 在方便性超过相对成本之前,必须有很多这样的方法,在这一点上,我想知道有问题的资源的规格。URI应该映射到一个定义明确的资源,而不是包括厨房水槽以外的所有内容。无论如何,函数名应该只有少量可能的值。

  3. 标题表示您从查询字符串中获取此信息,这表明您通过做不同的事情来对GET做出反应。GET应该是"查看"操作,返回所查看事物的状态。这当然可能需要做很多工作(典型的例子是搜索,它可以进行很多复杂的比较,可能针对各种不同的来源,但仍然是一个"查看"操作)。查询字符串不应该选择操作,这应该通过检查张贴到资源的信息来完成,或者更好的是,张贴到每种操作具有完全不同URI的资源。

基于后续注释,我将创建特定于上下文的处理程序,而不是一个处理程序来处理所有通用请求。否则,将MVC框架集成到webforms项目中,并让MVC框架处理对象/方法委派。