Как загрузить файлы через страницу HMTL, размещенную с использованием HTTPListener, в самостоятельном приложении - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть очень простая страница, размещенная в приложении 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.

...