HttpListenerContext добавляет рекурсивную «% EF% BF% BD» в HttpListener.request.url - PullRequest
0 голосов
/ 10 декабря 2018

В моем приложении HttpListener listener постоянно работает в фоновом режиме в отдельном потоке.Этот слушатель используется для обработки файлов, которые запрашиваются через порт localhost.И запрашивает указанные файлы с сервера.

Слушатель настроен следующим образом:

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);

Это работает нормально большую часть времени.Возвращает имя файла, который был запрошен, как и ожидалось.Но иногда (и непоследовательно) к имени файла добавляется «% EF% BF% BD» 104 раза, а для его закрытия - «GP» .. выглядит так

"% EF% BF% BD%EF% BF% BD ....% EF% BF% BD% EF% BF% BDGP "

Это не происходит с одним и тем же файлом каждый раз.И файл, с которым это случилось, может быть отлично запрошен на новой итерации.

Проверка имени файла перед его отправкой в ​​HttpListener выдает только имя файла, что означает, что он добавляется где-то во время процесса из HttpListener или HttpListenerContext.

ВсеЭто должно быть сделано с использованием кодировки ASCII.

Я использую подмножество Unity .Net 2.0 с эквивалентной версией среды выполнения .net 3.5

...