Csharp/C Sharp by API/System.Net/HttpListener — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 15:12, 26 мая 2010
HttpListener.AuthenticationSchemes
<source lang="csharp">
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.IO.rupression; using System.Net; using System.Net.Mail; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Xml; public class MainClass {
public static void Main() { using (HttpListener listener = new HttpListener()) { listener.AuthenticationSchemes = AuthenticationSchemes.Negotiate; listener.Prefixes.Add("http://localhost:8080/"); listener.Prefixes.Add("https://localhost/"); listener.Start(); HttpListenerContext ctx = listener.GetContext(); ctx.Response.StatusCode = 200; string name = ctx.Request.QueryString["name"]; StreamWriter writer = new StreamWriter(ctx.Response.OutputStream);writer.WriteLine("
Hello, {0}
", name); writer.WriteLine("- ");
foreach (string header in ctx.Request.Headers.Keys)
{
writer.WriteLine("
- {0}: {1} ",header, ctx.Request.Headers[header]);
}writer.WriteLine("");
writer.Close(); ctx.Response.Close(); listener.Stop(); } }
}
</source>
HttpListener.GetContext()
<source lang="csharp">
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.IO.rupression; using System.Net; using System.Net.Mail; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Xml; public class MainClass {
public static void Main() { using (HttpListener listener = new HttpListener()) { listener.AuthenticationSchemes = AuthenticationSchemes.Negotiate; listener.Prefixes.Add("http://localhost:8080/"); listener.Prefixes.Add("https://localhost/"); listener.Start(); HttpListenerContext ctx = listener.GetContext(); ctx.Response.StatusCode = 200; string name = ctx.Request.QueryString["name"]; StreamWriter writer = new StreamWriter(ctx.Response.OutputStream);writer.WriteLine("
Hello, {0}
", name); writer.WriteLine("- ");
foreach (string header in ctx.Request.Headers.Keys)
{
writer.WriteLine("
- {0}: {1} ",header, ctx.Request.Headers[header]);
}writer.WriteLine("");
writer.Close(); ctx.Response.Close(); listener.Stop(); } }
}
</source>
HttpListener.Prefixes.Add
<source lang="csharp"> using System; using System.IO; using System.Net; using System.Text; using System.Threading; class WebServer {
HttpListener myListener; string _baseFolder; public WebServer(string uriPrefix, string baseFolder) { System.Threading.ThreadPool.SetMaxThreads(50, 1000); System.Threading.ThreadPool.SetMinThreads(50, 50); myListener = new HttpListener(); myListener.Prefixes.Add(uriPrefix); _baseFolder = baseFolder; } public void Start() { myListener.Start(); while (true) try { HttpListenerContext request = myListener.GetContext(); ThreadPool.QueueUserWorkItem(ProcessRequest, request); } catch (HttpListenerException) { break; } catch (InvalidOperationException) { break; } } public void Stop() { myListener.Stop(); } void ProcessRequest(object listenerContext) { try { var context = (HttpListenerContext)listenerContext; string filename = Path.GetFileName(context.Request.RawUrl); string path = Path.rubine(_baseFolder, filename); byte[] msg; if (!File.Exists(path)) { context.Response.StatusCode = (int)HttpStatusCode.NotFound; msg = Encoding.UTF8.GetBytes("Sorry, that page does not exist"); } else { context.Response.StatusCode = (int)HttpStatusCode.OK; msg = File.ReadAllBytes(path); } context.Response.ContentLength64 = msg.Length; using (Stream s = context.Response.OutputStream) s.Write(msg, 0, msg.Length); } catch (Exception ex) { Console.WriteLine("Request error: " + ex); } }
}
</source>