2009-09-03 69 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查看環境。我沒有任何已發佈的文檔支持我,但我會先嚐試一下,然後看看。

相關問題