2009-09-03 8 views
2

이전 실행 가능 프로그램을 Apache의 cgi-bin 디렉토리에두고 CGI 스크립트로 사용할 수 있다는 인상하에있었습니다. 내가Windows에서 Apache의 실행 파일에 CGI 인수 전달

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); 
    } 
} 

를 C# 프로그램이 다음 다음 쿼리 문자열 hello=kitty&goodbye=world 메인에 첫 번째 매개 변수로 전달 될 것이다 http://example.com/cgi-bin/TestProg?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를 사용하여 환경을 볼 수 있습니다. 나는 나를 뒷받침 할 어떤 출판 된 문서도 가지고 있지 않지만, 먼저 그것을 시험해보고 볼 것이다.