protected override void OnResourceHandlerRegister()
        {
            if (BuildDataService != null)
            {
                var provider = DataServiceProvider.Create(this);

                BuildDataService.Invoke(provider);
            }
        }
        internal static DataServiceProvider Create(SchemeConfiguration schemeConfiguration)
        {
            var domainName = $"{schemeConfiguration.DomainName}".ToLower();

            if (string.IsNullOrEmpty(domainName))
            {
                throw new ArgumentNullException($"DomainName in {nameof(SchemeConfiguration)} must not be null.");
            }

            if (WinFormium.Runtime.Container.IsRegistered <DataServiceProvider>(domainName))
            {
                throw new ArgumentException($"Provider with same domain name \"{domainName}\" has already existed.");
            }


            var provider = new DataServiceProvider(schemeConfiguration);

            WinFormium.Runtime.Container.RegisterInstance(provider, domainName);

            return(provider);
        }
Exemple #3
0
        protected override ResourceResponse GetResourceResponse(ResourceRequest request)
        {
            var response = new ResourceResponse(request);



            var provider = DataServiceProvider.GetDataServiceProvider(Configuration.DomainName);


            if (string.IsNullOrEmpty(request.Uri.Host))
            {
                response.HttpStatus = System.Net.HttpStatusCode.BadRequest;

                return(response);
            }

            if (provider == null)
            {
                response.HttpStatus = System.Net.HttpStatusCode.NotFound;
                return(response);
            }

            var relativePath = request.Uri.LocalPath;

            relativePath = relativePath.Trim('/');



            if (request.Method == Method.OPTIONS && provider?.Routes.SingleOrDefault(x => x.RoutePath.Equals(relativePath, StringComparison.CurrentCultureIgnoreCase)) != null)
            {
                //if (!string.IsNullOrEmpty(request.Headers.Get("origin")))
                //{
                //    response.Headers.Set(ACCESS_CONTROL_ALLOW_ORIGIN, request.Headers.Get("origin"));
                //    response.Headers.Set(ACCESS_CONTROL_MAX_AGE, "3600");
                //}

                return(response);
            }

            var route = provider?.Routes.SingleOrDefault(x => x.RoutePath.Equals(relativePath, StringComparison.CurrentCultureIgnoreCase) && (x.RouteMethod == request.Method || x.RouteMethod == Method.None));


            if (route == null)
            {
                response.HttpStatus = System.Net.HttpStatusCode.NotFound;
                return(response);
            }



            try
            {
                response = route.Execute(request);

                if (response == null)
                {
                    response            = new ResourceResponse();
                    response.HttpStatus = System.Net.HttpStatusCode.InternalServerError;
                }
            }
            catch (Exception ex)
            {
                response            = new ResourceResponse();
                response.HttpStatus = System.Net.HttpStatusCode.InternalServerError;
                response.TextContent(ex.ToString());
            }

            //response.Headers.Set(ACCESS_CONTROL_ALLOW_HEADERS, "*");
            //response.Headers.Set(ACCESS_CONTROL_ALLOW_METHODS, "*");

            //if (!string.IsNullOrEmpty(request.Headers.Get("origin")))
            //{
            //    response.Headers.Set(ACCESS_CONTROL_ALLOW_ORIGIN, request.Headers.Get("origin"));
            //    response.Headers.Set(ACCESS_CONTROL_MAX_AGE, "3600");
            //}


            return(response);
        }