У меня есть очень простая страница, размещенная в приложении WPF с использованием httplistener
ThreadPool.QueueUserWorkItem(o =>
{
Console.WriteLine("Webserver running...");
try
{
while (_listener.IsListening)
{
ThreadPool.QueueUserWorkItem(c =>
{
var ctx = c as HttpListenerContext;
try
{
if (ctx == null)
{
return;
}
var requestUrl = ctx.Request.Url.LocalPath.Trim('/');
var rstr = _responderMethod(ctx.Request);
var buf = Encoding.UTF8.GetBytes(rstr);
ctx.Response.ContentLength64 = buf.Length;
ctx.Response.OutputStream.Write(buf, 0, buf.Length);
}
catch (Exception ex)
{
// TODO: add log here.
Debug.WriteLine(ex.Message);
}
finally
{
// Always close the stream.
if (ctx != null)
{
ctx.Response.OutputStream.Close();
}
}
}, _listener.GetContext());
}
}
catch (Exception ex)
{
// TODO: add log here.
Debug.WriteLine(ex.Message);
}
});
И она содержит эту HTML-страницу, которая должна позволять клиентам загружать только некоторые локальные файлы, ранее сгенерированныеосновное приложение.
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Self Hosted WebServer</title>
</head>
<body>
<div>
<h2>
Downloads
</h2>
<ul style="font-size:large">
<li>
File 001 (<a href="V1.xlsx" download>xlsx</a> | <a href="v1.pdf" download>pdf</a> | <a href="v1.zip" download>zip</a>)
</li>
</ul>
</div>
</body>
</html>
Однако, когда я захожу на веб-страницу и пытаюсь загрузить, на самом деле она не получает локальный файл.Я пробовал разные и абсолютные пути, но он все равно не может загрузить файл.
Есть что-то, чего мне не хватает, мне действительно нужно как-то обрабатывать запрос вместо простого HTMLСсылка для скачивания href?Или есть какой-то другой способ предоставить это простое решение для хостинга?
Я использую VS 2017, C # 4.6.1, и мое основное приложение - WPF.