Я использую httplistener с кодом, который основан на коде из:
https://aksakalli.github.io/2014/02/24/simple-http-server-with-csparp.html
Я пытаюсь реализовать сеансы.
К сожалению, я не могу ничего найти в HttpListenerContext , относящийся к сеансу.
Я также пытался использовать System.Web.HttpContext.Current.Session.SessionID Но это приводит меня к ошибке «Ссылка на объект неустановить экземпляр объекта ”
Буду признателен за помощь.
Пример кода:
private void ProcessContext(HttpListenerContext context)
{
// get filename path
string filename = context.Request.Url.AbsolutePath;
if (filename != null) filename = filename.Substring(1);
// get default index file if needed
if (string.IsNullOrEmpty(filename))
{
foreach (string indexFile in indexFiles)
{
if (File.Exists(Path.Combine(path, indexFile)))
{
filename = indexFile;
break;
}
}
}
Console.WriteLine("Loading file: " + filename);
filename = Path.Combine(path, filename);
// send file
HttpStatusCode statusCode;
if (File.Exists(filename))
{
try
{
using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
// get mime type
context.Response.ContentType = mimeTypes[Path.GetExtension(filename)];
context.Response.ContentLength64 = stream.Length;
// copy file stream to response
stream.CopyTo(context.Response.OutputStream);
stream.Flush();
context.Response.OutputStream.Flush();
}
statusCode = HttpStatusCode.OK;
}
catch (Exception e)
{
Console.WriteLine("ERROR: " + e.Message);
statusCode = HttpStatusCode.InternalServerError;
}
}
else
{
Console.WriteLine("File not found: " + filename);
statusCode = HttpStatusCode.NotFound;
}
// finish
context.Response.StatusCode = (int)statusCode;
if (statusCode == HttpStatusCode.OK)
{
context.Response.AddHeader("Date", DateTime.Now.ToString("r"));
context.Response.AddHeader("Last-Modified", File.GetLastWriteTime(filename).ToString("r"));
}
context.Response.OutputStream.Close();
}