代码之家  ›  专栏  ›  技术社区  ›  Remy

HttpListenerContext将递归的%EF%BF%BD添加到HttpListener.request.url

  •  0
  • Remy  · 技术社区  · 6 年前

    在我的申请中 HttpListener listener 在一个单独的线程上不断地在后台运行。此侦听器用于处理通过本地主机端口请求的文件。并从服务器请求所述文件。

    侦听器的设置如下

    listener = new HttpListener();
    listener.Prefixes.Add("http://+:50003/");
    listener.Start();
    httpListenerThread = new Thread(RunListener);
    httpListenerThread.Start();
    

    它一直活在线上

    while (listenerIsRunning)
    {
        if (listener.IsListening)
        {
             IAsyncResult result = listener.BeginGetContext(new AsyncCallback(HttpRequestListenerCallback), listener);
             result.AsyncWaitHandle.WaitOne(1);
        }
    }
    

    如果通过HttpListener请求一个文件,我将在回调中获得所请求的文件名,如下所示(其中 result 属于类型 IAsyncResult object state ):

     HttpListener listener = (HttpListener)result.AsyncState;
     HttpListenerContext context = listener.EndGetContext(result);
     string fileName = context.Request.Url.AbsolutePath.Substring(1);
    

    这在大多数情况下都很有效。返回按预期请求的文件名。但有时(并且不一致地)它会在文件名后面追加104次“%EF%BF%BD”,然后“GP”关闭它。。像这样

    %EF%BF%BD%EF%BF%BD。。。。%EF%BF%BD%EF%BF%BDGP“

    每次也不会发生在同一个文件上。在新的迭代中可以很好地请求一个文件。

    在将文件发送到HttpListener之前检查文件名只会得到文件名,这意味着在 HttpListener ,或 HttpListenerContext .

    一切都是/应该使用ASCII字符集来完成。

    我使用Unity的.NET2.0子集和.NET3.5等效的运行时版本

    0 回复  |  直到 6 年前