如何通过自托管应用程序中使用HTTPListener托管的HMTL页面下载文件

时间:2019-02-12 16:08:15

标签: c# wpf httplistener

我使用httplistener在WPF应用程序中托管了一个非常简单的页面

config = dict(
            languageCode='de',
            maxAlternatives=1,
            enableWordTimeOffsets=True,
            enableAutomaticPunctuation=True,
            model='default',
            encoding='ENCODING_UNSPECIFIED'
          )

它正在托管此HTML页面,该页面只能允许客户端下载以前由主应用程序生成的一些本地文件。

            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 href下载链接吗? 还是有其他托管方式可以提供这种简单的解决方案?

我正在使用VS 2017,C#4.6.1,我的主要应用是WPF。

0 个答案:

没有答案