2017-03-26 13 views
0

C#으로 매우 간단한 웹 서버를 구축하려고합니다. 나는 HttpListener을 사용했고, 지금까지 나는 그것을 가동시켜 달리고있다. 그러나 내가 InputStream 요청을하려고 할 때, 나는 GET에 무엇을 넣든 항상 NullStream을 만난다.C# : HttpListener request InputStream은 항상 빈 스트림입니다.

class WebServer 
{ 
    private HttpListener listener; 
    private bool firstRun = true; 
    private const string prefixes = "http://127.0.0.1:8080/"; 

    public void Start() 
    { 
     if (firstRun) 
     { 
      listener = new HttpListener(); 
      listener.Prefixes.Add(prefixes); 
      firstRun = false; 
     } 
     try 
     { 
      listener.Start(); 
     } 
     catch (HttpListenerException hlex) 
     { 
      return; 
     } 
     while (listener.IsListening) 
     { 
      var context = listener.GetContext(); 
      context.Request.InputStream.Position = 0;//i even tried to reset stream position 
      var body = new StreamReader(context.Request.InputStream).ReadToEnd();//this is always empty("") 

      byte[] b = Encoding.UTF8.GetBytes("ACK"); 
      context.Response.StatusCode = 200; 
      context.Response.KeepAlive = false; 
      context.Response.ContentLength64 = b.Length; 

      var output = context.Response.OutputStream; 
      output.Write(b, 0, b.Length); 
      context.Response.Close(); 
      Console.WriteLine(body); 
     } 
     listener.Stop(); 
     listener.Close(); 
    } 

} 

내가 브라우저를 열고 GET 요청을 생성하고,이 URL을 입력하려면 : 당신이 코드에서 볼 수 있듯이

http://127.0.0.1:8080/?samad=11

내가도 재설정하려고 여기

내 코드입니다 스트림 위치를 시작점으로 설정하지만 여전히 운이 없다.

+0

브라우저에 위치하고 있습니다. 모든 데이터는 헤더에 있습니다. 일부 데이터를 수신하기 위해 HttpWebRequest 클래스를 사용하는 간단한 클라이언트를 작성할 수 있습니다. – CSharpie

+0

@ CSharpie 귀하의 의견에 감사드립니다. 하지만 내가 원하는 것은 URL에 입력 된 데이터를받는 것입니다. 나는 클라이언트 프로그램을 갖고 싶지 않다. 나는 또한'context.Request.Headers'를 체크했는데'samad = 11' 데이터가 없었습니다. –

+1

'samad = 11'이 헤더가 아닌 QueryString에 있습니다. –

답변

1

당신이 원하는 정보는 단순히 페이지를 열 때 실제의 InputStream 아무것도 보내 나던 HttpListenerRequest.QueryString

var context = listener.GetContext(); 
var qry = context.Request.QueryString; 
foreach(var key in qry.AllKeys) 
    Console.WrtieLine("{0} = {1}", key, qry[key]); 
+0

답변 (실제로 @KevinGosse의 대답 : D)을 정답으로 선택했습니다. 그러나 나는 또한'POST'에서 데이터를 보내면 입력 스트림으로 간다는 것을 알게되었습니다. 나는이 문제를 가진 다른 사람들이 그것을 볼 수 있도록 당신의 대답에 그것을 덧붙이는 것이 좋은 생각이라고 생각합니다 (완전을 기하기 위해서). –