コード例 #1
0
ファイル: RainyStandaloneServer.cs プロジェクト: BooTeK/Rainy
        public override void Configure(Funq.Container container)
        {
            JsConfig.DateHandler = JsonDateHandler.ISO8601;

            Plugins.Add(new SwaggerFeature());

            // register our custom exception handling
            this.ExceptionHandler        = Rainy.ErrorHandling.ExceptionHandler.CustomExceptionHandler;
            this.ServiceExceptionHandler = Rainy.ErrorHandling.ExceptionHandler.CustomServiceExceptionHandler;



            var swagger_path    = Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.Location), "../../swagger-ui/");
            var swagger_handler = new FilesystemHandler("/swagger-ui/", swagger_path);

            var embedded_handler = new EmbeddedResourceHandler("/srv/", this.GetType().Assembly, "Rainy.WebService.Admin.UI");

            // BUG HACK
            // GlobalResponseHeaders are not cleared between creating instances of a new config
            // this will be fatal (duplicate key error) for unit tests so we clear the headers
            EndpointHostConfig.Instance.GlobalResponseHeaders.Clear();

            SetConfig(new EndpointHostConfig {
                // not all tomboy clients send the correct content-type
                // so we force application/json
                DefaultContentType = ContentType.Json,

                RawHttpHandlers =
                {
                    swagger_handler.CheckAndProcess,
                    embedded_handler.CheckAndProcess
                },

                // enable cors
                GlobalResponseHeaders =
                {
                    { "Access-Control-Allow-Origin",  "*"                               },
                    { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" },
                    // time in seconds preflight responses can be cached by the client
                    { "Access-Control-Max-Age",       "1728000"                         },
//					{ "Access-Control-Max-Age", "1" },

                    // the Authority header must be whitelisted; it is sent be the rainy-ui
                    // for authentication
                    { "Access-Control-Allow-Headers", "Content-Type, Authority"         },
                },
            });
        }
コード例 #2
0
ファイル: AppHost.cs プロジェクト: gmstrbytes/Rainy
        public override void Configure(Funq.Container container)
        {
            this.ComposeObjectGraph(container);

            JsConfig.DateHandler = JsonDateHandler.ISO8601;

            Plugins.Add(new SwaggerFeature());

            // register our custom exception handling
            this.ExceptionHandler        = Rainy.ErrorHandling.ExceptionHandler.CustomExceptionHandler;
            this.ServiceExceptionHandler = Rainy.ErrorHandling.ExceptionHandler.CustomServiceExceptionHandler;

            string swagger_path;

            if (JsonConfig.Config.Global.Development)
            {
                swagger_path = Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.Location), "../../swagger-ui/");
            }
            else
            {
                swagger_path = Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.Location), "swagger-ui/");
            }
            var swagger_handler = new FilesystemHandler("/swagger-ui/", swagger_path);

            IHttpHandlerDecider uihandler;
            IHttpHandlerDecider fontshandler = null;

            if (JsonConfig.Config.Global.Development)
            {
                var webui_path = Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.Location), "../../../Rainy.UI/dist/");
                uihandler = (IHttpHandlerDecider) new FilesystemHandler("/", webui_path);
                var fonts_path = Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.Location), "../../../Rainy.UI/dist/fonts/");
                fontshandler = (IHttpHandlerDecider) new FilesystemHandler("/fonts/", fonts_path);
            }
            else
            {
                uihandler = (IHttpHandlerDecider) new EmbeddedResourceHandler("/", this.GetType().Assembly, "Rainy.WebService.Admin.UI");
            }

            this.RequestFilters.Add((req, resp, dto) => {
                if (req.HttpMethod == "OPTIONS")
                {
                    resp.StatusCode = 200;
                    resp.End();
                }
            });

            // BUG HACK
            // GlobalResponseHeaders are not cleared between creating instances of a new config
            // this will be fatal (duplicate key error) for unit tests so we clear the headers
            EndpointHostConfig.Instance.GlobalResponseHeaders.Clear();

            var endpoint_config = new EndpointHostConfig {
                EnableFeatures = Feature.All.Remove(Feature.Metadata),
                //DefaultRedirectPath = "/admin/",

                // not all tomboy clients send the correct content-type
                // so we force application/json
                DefaultContentType = ContentType.Json,

                RawHttpHandlers =
                {
                    uihandler.CheckAndProcess,
                    fontshandler.CheckAndProcess,
                    swagger_handler.CheckAndProcess
                },

                // enable cors
                GlobalResponseHeaders =
                {
                    { "Access-Control-Allow-Origin",  "*"                                    },
                    { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"      },
                    // time in seconds preflight responses can be cached by the client
                    { "Access-Control-Max-Age",       "1728000"                              },
//					{ "Access-Control-Max-Age", "1" },

                    // the Authority header must be whitelisted; it is sent be the rainy-ui
                    // for authentication
                    { "Access-Control-Allow-Headers", "Content-Type, Authority, AccessToken" },
                },
            };

            endpoint_config.AddMaxAgeForStaticMimeTypes["text/html"]       = new TimeSpan(1, 0, 0);
            endpoint_config.AddMaxAgeForStaticMimeTypes["text/css"]        = new TimeSpan(1, 0, 0);
            endpoint_config.AddMaxAgeForStaticMimeTypes["text/javascript"] = new TimeSpan(1, 0, 0);
            SetConfig(endpoint_config);
        }