2009-09-03 73 views
2

我的印象是,我可以将任何旧的可执行程序放在Apache的cgi-bin目录中,并将其用作CGI脚本。特别是,如果我有一个C#程序将CGI参数传递给Windows上的Apache中的可执行文件

static class TestProg 
{ 
    static void Main(string[] args) 
    { 
     Console.Write("Content-type: text/plain\r\n\r\n"); 
     Console.WriteLine("Arguments:"); 
     foreach (string arg in args) 
      Console.WriteLine(arg); 
    } 
} 

,然后去http://example.com/cgi-bin/TestProg?hello=kitty&goodbye=world然后查询字符串hello=kitty&goodbye=world将作为第一个参数,以主传递,所以我的页面看起来应该像

Arguments: 
hello=kitty&goodbye=world 

不幸的是,我的查询参数都没有通过;该页面加载并只打印Arguments:而没有任何跟随它。

那么如何让我的查询参数传递给这个程序呢?

回答

4

在命令行上不传递参数 - 相反,apache在调用cgi程序之前设置了环境变量(http://httpd.apache.org/docs/2.0/howto/cgi.html#behindscenes)。

您可以访问包含查询字符串文本的环境变量'QUERY_STRING'。

String queryString = System.Environment.GetEnvironmentVariable("QUERY_STRING"); 

然后,您将需要自己分析queryString。

但是,POST数据通过STDIN传递,因此您需要使用Console.In来处理它。

3

从我使用CGI和Apache开始已经很长时间了,但是如果我没有记错,查询字符串是Apache中的一个环境变量。在C#中,您可以使用System.Environment.GetEnvironmentVariables查看环境。我没有任何已发布的文档支持我,但我会先尝试一下,然后看看。

相关问题