2

私は、古い実行可能プログラムcgi-binを Apache のディレクトリに置き、それを 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がメインの最初のパラメーターとして渡されるため、ページは次のようになります

Arguments:
hello=kitty&goodbye=world

残念ながら、私のクエリ パラメータはどれも渡されません。ページが読み込まれ、Arguments:その後に何も表示されずに印刷されます。

では、クエリ パラメータをこのプログラムに渡すにはどうすればよいでしょうか。

4

2 に答える 2

6

引数はコマンド ラインでは渡されません。代わりに、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 を使用して処理する必要があります。

于 2009-09-03T15:28:36.517 に答える
3

CGI と Apache を使用してから長い時間が経ちましたが、私の記憶が正しければ、クエリ文字列は Apache の環境変数です。C# では、System.Environment.GetEnvironmentVariables で環境を確認できます。私をバックアップする公開されたドキュメントはありませんが、最初にそれを試してみてください.

于 2009-09-03T15:28:02.553 に答える