コード例 #1
0
ファイル: WebFileResponse.cs プロジェクト: cliftonm/clifton
        public bool ProcessFileRequest(HttpListenerContext context)
        {
            bool handled = false;
            string path = context.Path().Value.Replace('/', '\\').LeftOfRightmostOf('.');	// without extension
            string ext = context.Extension().Value;

            if (String.IsNullOrEmpty(path))
            {
                path = "index";
            }

            if (String.IsNullOrEmpty(ext))
            {
                ext = "html";
            }

            path = path + "." + ext;
            path = Path.Combine(websitePath, path);

            if (File.Exists(path))
            {
                switch (ext)
                {
                    case "html":
                    case "spa":
                        ServiceManager.Get<ISemanticProcessor>().ProcessInstance<WebServerMembrane, HtmlResponse>(r =>
                        {
                            r.Context = context;
                            r.Html = ReadTextFile(path);
                        });
                        break;

                    case "woff":
                    case "woff2":
                    case "ttf":
                        ServiceManager.Get<ISemanticProcessor>().ProcessInstance<WebServerMembrane, FontResponse>(r =>
                        {
                            r.Context = context;
                            r.ContentType = "font/" + ext;
                            r.BinaryData = ReadBinaryFile(path);
                        });
                        break;

                    case "js":
                        ServiceManager.Get<ISemanticProcessor>().ProcessInstance<WebServerMembrane, JavascriptResponse>(r =>
                        {
                            r.Context = context;
                            r.Script = ReadTextFile(path);
                        });
                        break;

                    case "css":
                        ServiceManager.Get<ISemanticProcessor>().ProcessInstance<WebServerMembrane, CssResponse>(r =>
                        {
                            r.Context = context;
                            r.Script = ReadTextFile(path);
                        });
                        break;

                    case "jpg":
                    case "ico":
                    case "png":
                    case "bmp":
                    case "gif":
                        ServiceManager.Get<ISemanticProcessor>().ProcessInstance<WebServerMembrane, ImageResponse>(r =>
                        {
                            r.Context = context;
                            r.ContentType = "image/" + ext;
                            r.BinaryData = ReadBinaryFile(path);
                        });
                        break;

                    default:
                        ServiceManager.Get<ISemanticProcessor>().ProcessInstance<WebServerMembrane, StringResponse>(r =>
                        {
                            r.Context = context;
                            r.Message = ReadTextFile(path);
                            r.StatusCode = 200;
                        });
                        break;
                }

                handled = true;
            }

            return handled;
        }