asp.Net Httpリクエストの実装コードの切り取り
1726 ワード
1:前言この文章は比較的に短くて、主に私の1つの随想が生んだ1段のコードのためです.このコードの機能は、単純なHttpサーバと呼ぶことも、Httpリクエストキャプチャと呼ぶこともできます.実現する機能は、Httpリクエストを切り取って自分で処理することです.
2:コード
3:簡単に説明するコードの核心はHttpListenerで、それを通じて1つのポートを探聴して、要求がある時BeginGetContextはGetContext方法に渡して非同期処理を行って、この方法の内部でまず実現するのは再傍受です.そして自分の処理を行います.
ほほほ、このコードは何か他の用途があるか考えなければなりません.
2:コード
public class HttpServer : IDisposable
{
private HttpListener listener;
public void Start()
{
listener = new HttpListener();
listener.Prefixes.Add("http://localhost/");
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication | AuthenticationSchemes.Anonymous;
listener.Start();
listener.BeginGetContext(GetContext, null);
}
private void GetContext(IAsyncResult ar)
{
HttpListenerRequest Request;
HttpListenerResponse Response;
try
{
HttpListenerContext ctx = listener.EndGetContext(ar);
Request = ctx.Request;
Response = ctx.Response;
//setup waiting for the next request
listener.BeginGetContext(GetContext, null);
}
catch (InvalidOperationException)
{
return;
}
catch (HttpListenerException)
{
return;
}
try
{
var sw = new StreamWriter(Response.OutputStream);
sw.Write(@"
");
sw.Flush();
}
finally
{
Response.OutputStream.Flush();
Response.Close();
}
}
public void Dispose()
{
if (listener != null)
listener.Stop();
}
}
3:簡単に説明するコードの核心はHttpListenerで、それを通じて1つのポートを探聴して、要求がある時BeginGetContextはGetContext方法に渡して非同期処理を行って、この方法の内部でまず実現するのは再傍受です.そして自分の処理を行います.
ほほほ、このコードは何か他の用途があるか考えなければなりません.