Вызов функции, имя которой хранится в переменной - PullRequest
1 голос
/ 22 сентября 2011

Я создал небольшой классический 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 ]

5 голосов
/ 22 сентября 2011

Я думаю, вы ищете функцию Eval в VBScript .Вы можете использовать его для вызова вашего метода следующим образом (демонстрационный скрипт vbs в wsh):

Dim func, param

func = "Hello"
param = "everybody"

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

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

, который возвращает «Hello allbody», как и ожидалось.

Что касается вашего asp.net code: Я не собираюсь судить о целесообразности вашего решения, я не знаю ситуацию.Это может определенно работать, хотя.Всего два замечания:

  1. И WebClient, и StreamReader реализуют IDisposable.Оберните их в блок использования.
  2. Если вы собираетесь загружать подобные URL-адреса, убедитесь, что вы проверили свою строку, чтобы вы не пошли и не загружали плохие URL-адреса.То же самое для имени функции в вашем классическом asp, которое вы передаете в строке запроса.

Menno

3 голосов
/ 22 сентября 2011

Попробуйте использовать GetRef вместо Eval.

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

result = GetRef(functionName)(param)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...