Веб-сервер C # запросил проблему каталога - PullRequest
1 голос
/ 03 марта 2010

Я пытаюсь создать веб-сервер на C #, мне нужно получить запрошенный URL, а затем перечислить запрошенные файлы и папки. Это хорошо, чтобы получить первый каталог.

Например, Мой корень веб-сервера - c: \ test, когда я открываю localhost, я получаю содержимое папки test. Скажем, данные - это подпапка c: \ test, я могу щелкнуть данные из браузера и перейти в C: \ test \ data сейчас, когда я нажимаю на любую папку, тогда запрос get приходит с% 2F вместо c: \ test \ data \ хорошо, и я застрял.

Код для получения запроса:

 sRequest = sBuffer.Substring(0, iStartPos - 1);
    sRequest.Replace("\\", "/");
 if ((sRequest.IndexOf(".") < 1) && (!sRequest.EndsWith("/")))
                    {
                        sRequest = sRequest + "/";

                    }
iStartPos = sRequest.LastIndexOf("/") + 1;
                    sRequestedFile = sRequest.Substring(iStartPos);
sDirName = sRequest.Substring(sRequest.IndexOf("/"), sRequest.LastIndexOf("/") - 3);

if (sDirName == "/")
                        sLocalDir = sMyWebServerRoot;
                    else
                    {
                        //Get the Virtual Directory
                        // sLocalDir = GetLocalPath(sMyWebServerRoot, sDirName);
                        Console.WriteLine("i am here");
                        sDirName = sDirName.Substring(1, sDirName.Length - 2);
                        //sDirName = sDirName.Replace("/", "\\");
                        Console.WriteLine("Amit:" + sDirName);
                        string test1 = Path.Combine("C:\\test\\", sDirName);
                        sLocalDir = Path.Combine(@"C:\\test", sDirName);
                    }

Теперь к списку Dir у меня есть следующая функция:

public String listdir(string sLocaldir,string sDirName)
        {
            string sresult = "";
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<html>");
            sb.AppendLine("<head>");
            sb.AppendLine("<title>Test</title>");
            sb.AppendLine("</head>");
            sb.AppendLine("<body>");
            sb.AppendLine("<h1><center><u>Listing Folders Under " + sLocaldir + "</h1></u></center>");
            string[] folderpaths = Directory.GetDirectories(sLocaldir);

            sb.AppendLine("<font color=red><font size=5>Listing Directories<br>");
            for (int i = 0; i < folderpaths.Length; i++)
            {
                string fpath = folderpaths[i];
                string[] foldernames = fpath.Split('\\');
                int j = foldernames.Length - 1;
                string fname = foldernames[j];
                string fullname;
                if (sDirName != "/")
                {
                  //fname= fname + "\\";
                  fullname = sDirName +"/"+ fname;
                  //fullname = fullname.Replace("\\", "/");
                    //fullname = Path.GetPathRoot("C:\\test");
                    Console.WriteLine("Get full path:" + fullname);
                }
                else
                {
                    fullname = fname;
                }
                Console.WriteLine("Full Test:" + fullname);
                //sb.AppendLine(string.Format("<img src=file.png height=20 width=20><a href=\"{0}\">{1}</a><br>",
                sb.AppendLine(string.Format("<img src=file.png height=20 width=20><a href=\"{0}\">{1}</a><br>",
                    HttpUtility.HtmlEncode(HttpUtility.UrlEncode(fullname )),
                    HttpUtility.HtmlEncode(fname)));
            }
            string[] filePaths = Directory.GetFiles(@"C:\test");
            sb.AppendLine("<font color=red><font size=5>Listing Files<br>");
            for (int i = 0; i < filePaths.Length; ++i)
            {
                string name = Path.GetFileName(filePaths[i]);

                sb.AppendLine(string.Format("<img src=file.png height=20 width=20><a href=\"{0}\">{1}</a><br>",
                    HttpUtility.HtmlEncode(HttpUtility.UrlEncode(name)),
                    HttpUtility.HtmlEncode(name)));
            }

            sb.AppendLine("</ul>");
            sb.AppendLine("</body>");
            sb.AppendLine("</html>");
            sresult = sb.ToString();
            return sresult;
            //Console.WriteLine(sresult);
        }

Любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 03 марта 2010

% 2F - безопасное кодирование для символа /. Вы HTMLE кодируете символ / в своем коде выше.

Ваш подход может быть намного проще, см .:

http://www.codeproject.com/KB/IP/mywebserver.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...