我的印象是我可以将任何旧的可执行程序放在Apache的cgi-bin
目录中,并将其用作CGI脚本。具体来说,如果我有一个C#程序
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
将作为第一个参数传递给main,因此我的页面应该看起来像
Arguments:
hello=kitty&goodbye=world
不幸的是,我的查询参数都没有通过;页面加载并打印Arguments:
,后面没有任何内容。
那么如何将我的查询参数传递给该程序呢?
答案 0 :(得分: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来处理它。
答案 1 :(得分:3)
自从我使用CGI和Apache以来已经很长时间了,但如果我没记错的话,查询字符串是Apache中的环境变量。在C#中,您可以使用System.Environment.GetEnvironmentVariables查看环境。我没有任何已发布的文档来支持我,但我会先尝试一下然后看看。