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

时间:2011-09-22 08:06:31

标签: 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;
    }

有人可以看到这样做有什么问题吗?

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

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

result = functionName(param)

还有任何想法如何解析参数。假设我将头部中的参数传递给“1,2,3,4”,我该如何将其传递到括号中?

2 个答案:

答案 0 :(得分:5)

我认为你正在寻找Eval function in VBScript。您可以使用它以下列方式调用您的方法(演示脚本是wsh中的vbs):

Dim func, param

func = "Hello"
param = "everybody"

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

Function Hello(name)
Hello = "Hello " & name
End Function

按预期返回“Hello everybody”。

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

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

答案 1 :(得分:3)

尝试使用GetRef代替Eval

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

result = GetRef(functionName)(param)