调用函数名称存储在变量中

iKo*_*ode 1 c# asp.net asp-classic

我创建了一个小的经典asp文件,我使用下面的方法调用asp.net.我工作,但不知何故感觉不对:

Booking.BelongsToSite = file_get_contents("http://localhost:82/test2.asp?functionName=RetBTS&param=" + User.ID);

protected string file_get_contents(string fileName)
{
    string sContents = string.Empty;
    if (fileName.ToLower().IndexOf("http:") > -1)
    { // URL 
        System.Net.WebClient wc = new System.Net.WebClient();
        byte[] response = wc.DownloadData(fileName);
        sContents = System.Text.Encoding.ASCII.GetString(response);
    }
        else
        {
            // Regular Filename 
            System.IO.StreamReader sr = new System.IO.StreamReader(fileName);
            sContents = sr.ReadToEnd();
            sr.Close();
        }  
        return sContents;
    }
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到这样做的任何问题?

也可以在Classic ASP/VB脚本中执行类似下面的操作.我无法让它调用动态函数名称:

dim functionName, param, result
functionName = request("functionName")
param = request("param")

result = functionName(param)
Run Code Online (Sandbox Code Playgroud)

还有任何想法如何解析参数.如果我像"1,2,3,4"那样传递头部中的参数,我怎样才能将其传递到括号中?

Men*_*vel 5

我想你正在寻找VBScript中Eval功能.您可以使用它以下列方式调用您的方法(演示脚本是wsh中的vbs):

Dim func, param

func = "Hello"
param = "everybody"

MsgBox(Eval(func & "(""" & param & """)"))

Function Hello(name)
Hello = "Hello " & name
End Function
Run Code Online (Sandbox Code Playgroud)

按预期,返回"Hello everybody".

至于你的asp.net代码:我不会判断你的解决方案是否合理,我不知道情况.它绝对可以工作.只有两个评论:

  1. WebClient和StreamReader都实现了IDisposable.将它们包裹在使用块中.
  2. 如果你要下载这样的网址,请确保验证你的字符串,这样你就不会去下载不好的网址.您在查询字符串中传递的经典asp中的函数名称也是如此.

门诺