コード例 #1
0
ファイル: Program.cs プロジェクト: AMoiseeva/server
        public Responce ProcessRequest(Request request, IAuthorization authorizator)
        {
            if (!authorizator.CheckIdentification(request))
            {
                return(authorizator.GetFailedResponce());
            }
            else
            {
                if (!authorizator.CheckAuthorization(request))
                {
                    return(SendError(403));
                }
            }

            string RequestUri = request.Path;

            RequestUri = Uri.UnescapeDataString(RequestUri);

            if (RequestUri.IndexOf("..") >= 0)
            {
                return(SendError(400));
            }

            if (RequestUri.EndsWith("/"))
            {
                RequestUri += "index.html";
            }
            string FilePath = Environment.CurrentDirectory + RequestUri;

            if (!File.Exists(FilePath))
            {
                Console.WriteLine(FilePath);
                return(SendError(404));
            }

            string Extension = RequestUri.Substring(RequestUri.LastIndexOf('.'));

            string ContentType = "";

            switch (Extension)
            {
            case ".htm":
            case ".html":
                ContentType = "text/html";
                break;

            case ".css":
                ContentType = "text/stylesheet";
                break;

            case ".js":
                ContentType = "text/javascript";
                break;

            case ".jpg":
                ContentType = "image/jpeg";
                break;

            case ".jpeg":
            case ".png":
            case ".gif":
                ContentType = "image/" + Extension.Substring(1);
                break;

            default:
                if (Extension.Length > 1)
                {
                    ContentType = "application/" + Extension.Substring(1);
                }
                else
                {
                    ContentType = "application/unknown";
                }
                break;
            }

            // Открываем файл, страхуясь на случай ошибки
            FileStream FS;

            try
            {
                FS = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
            }
            catch (Exception)
            {
                // Если случилась ошибка, посылаем клиенту ошибку 500
                return(SendError(500));
            }

            Responce response = new Responce();

            response.Version = "HTTP/1.1";
            response.Status  = "200 OK";
            response.Headers = new Dictionary <string, string>();
            response.Headers.Add("Content-type:", ContentType);
            response.Headers.Add("Content-Length:", FS.Length.ToString());
            response.FilePath = FilePath;
            FS.Close();
            return(response);
        }