Esempio n. 1
0
        public async Task CanMakeUrlRequest()
        {
            var         taskCompletionSource = new TaskCompletionSource <string>(TaskCreationOptions.RunContinuationsAsynchronously);
            IUrlRequest urlRequest           = null;
            int         statusCode           = -1;

            //Can be created on any valid CEF Thread, here we'll use the CEF UI Thread
            await Cef.UIThreadTaskFactory.StartNew(delegate
            {
                var requestClient = new UrlRequestClient((IUrlRequest req, byte[] responseBody) =>
                {
                    statusCode = req.Response.StatusCode;
                    taskCompletionSource.TrySetResult(Encoding.UTF8.GetString(responseBody));
                });

                var request    = new Request();
                request.Method = "GET";
                request.Url    = "https://code.jquery.com/jquery-3.4.1.min.js";

                //Global RequestContext will be used
                urlRequest = new UrlRequest(request, requestClient);
            });

            var stringResult = await taskCompletionSource.Task;

            Assert.True(!string.IsNullOrEmpty(stringResult));
            Assert.Equal(200, statusCode);
        }
Esempio n. 2
0
 private static void OnResolveRequest(IUrlRequest request, bool throwException, Action <IRoutingContext, ResponseStatus> requestCallback)
 {
     if (!string.IsNullOrEmpty(request.SiteArea) && !SiteMapService.IsSiteAreaInitialized(request.SiteArea))
     {
         SiteMapService.InitializeSiteArea(request.SiteArea, (a) =>
         {
             if (a)
             {
                 var _context = (IRoutingContext)null;
                 var _status  = OnResolveRoute(request, throwException, out _context);
                 requestCallback(_context, _status);
             }
             else
             {
                 if (throwException)
                 {
                     throw new SiteMapException(string.Format(SITEAREA_NOT_RESOLVED, request.SiteArea, request.RequestUrl),
                                                request.SiteArea, request);
                 }
                 else
                 {
                     requestCallback(null, ResponseStatus.HandlerNotFound);
                 }
             }
         });
     }
     else
     {
         var _context = (IRoutingContext)null;
         var _status  = OnResolveRoute(request, throwException, out _context);
         requestCallback(_context, _status);
     }
 }
Esempio n. 3
0
        public override RouteData GetRouteData(IUrlRequest request)
        {
            string virtualPath          = request.RequestUrl;
            ParametersCollection values = this._parsedRoute.Match(virtualPath, this.Defaults);

            if (values == null)
            {
                return(null);
            }
            RouteData data = new RouteData(this, this.RouteHandler);

            if (!this.ProcessConstraints(request, values, RouteDirection.IncomingRequest))
            {
                return(null);
            }
            foreach (var pair in values)
            {
                data.Values.Add(pair.Key, pair.Value);
            }
            if (this.DataTokens != null)
            {
                foreach (var pair2 in this.DataTokens)
                {
                    data.DataTokens[pair2.Key] = pair2.Value;
                }
            }
            return(data);
        }
Esempio n. 4
0
 protected override void OnRequestComplete(IUrlRequest request)
 {
     logic.OnRequestComplete(request.RequestStatus switch {
         UrlRequestStatus.Success => Success,
         UrlRequestStatus.Failed => Failed,
         _ => Unknown
     });
        public RoutingContext(IUrlRequest request, RouteData routeData, ParametersCollection parsedParameters)
        {
            Guard.ArgumentNotNull(request, "request");
            Guard.ArgumentNotNull(routeData, "routeData");
            Guard.ArgumentNotNull(parsedParameters, "parsedParameters");

            _request          = request;
            _routeData        = routeData;
            _parsedParameters = parsedParameters;
        }
        internal UrlResponse(IUrlRequest request, ResponseStatus responseStatus,
                             Object content, ParametersCollection responseParameters, Exception error)
        {
            Guard.ArgumentNotNull(request, "request");

            _request            = request;
            _responseStatus     = responseStatus;
            _content            = content;
            _responseParameters = responseParameters;
            _error = error;
        }
Esempio n. 7
0
 private bool ProcessConstraints(IUrlRequest request, ParametersCollection values, RouteDirection routeDirection)
 {
     if (this.Constraints != null)
     {
         foreach (var pair in this.Constraints)
         {
             if (!this.ProcessConstraint(request, pair.Value, pair.Key, values, routeDirection))
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Esempio n. 8
0
        public static void Resolve(IUrlRequest request, Action <IUrlResponse> responseCallback)
        {
            Guard.ArgumentNotNull(request, "request");
            Guard.ArgumentNotNull(responseCallback, "responseCallback");

            OnResolveRequest(request, false, (c, s) =>
            {
                if (s != ResponseStatus.Success)
                {
                    var _response = new UrlResponse(request, s, null);
                    responseCallback(_response);
                }
                else
                {
                    // and we get the response, using a callback
                    OnResolveResponse(c, false, responseCallback);
                }
            });
        }
        //private IRoutingContext GetContext(IRoutingContext context)
        //{
        //    if (context != null)
        //    {
        //        return context;
        //    }
        //    IRoutingRequest current = context.IRoutingRequest;
        //    if (current == null)
        //    {
        //        throw new InvalidOperationException(RouteCollection_RequiresContext);
        //    }
        //    return new RoutingContext(current, new RouteData());
        //}

        public RouteData GetRouteData(IUrlRequest request)
        {
            Guard.ArgumentNotNull(request, "request");
            Guard.ArgumentValue(string.IsNullOrEmpty(request.RequestUrl), "request", ROUTING_URL_REQUIRED);
            Guard.ArgumentValue(((request.RequestUrl.StartsWith("~", StringComparison.Ordinal) ||
                                  request.RequestUrl.StartsWith("/", StringComparison.Ordinal)) ||
                                 (request.RequestUrl.IndexOf('?') != -1)), "url", ROUTE_INVALID_ROUTE_URL);

            using (this.GetReadLock())
            {
                foreach (RouteBase base2 in this)
                {
                    RouteData routeData = base2.GetRouteData(request);
                    if (routeData != null)
                    {
                        return(routeData);
                    }
                }
            }
            return(null);
        }
Esempio n. 10
0
        ///// <summary>this is not required in this framework since we only work with relative urls </summary>
        //public override VirtualPathData GetVirtualPath(IRoutingContext context, ParametersDictionary values)
        //{
        //    BoundUrl url = this._parsedRoute.Bind(context.RouteData.Values, values, this.Defaults, this.Constraints);
        //    if (url == null)
        //    {
        //        return null;
        //    }
        //    if (!this.ProcessConstraints(context.Request, url.Values, RouteDirection.UrlGeneration))
        //    {
        //        return null;
        //    }
        //    VirtualPathData data = new VirtualPathData(this, url.Url);
        //    if (this.DataTokens != null)
        //    {
        //        foreach (KeyValuePair<string, object> pair in this.DataTokens)
        //        {
        //            data.DataTokens[pair.Key] = pair.Value;
        //        }
        //    }
        //    return data;
        //}

        #endregion

        #region Internal

        protected virtual bool ProcessConstraint(IUrlRequest request, object constraint,
                                                 string parameterName, ParametersCollection values, RouteDirection routeDirection)
        {
            object           obj2;
            IRouteConstraint constraint2 = constraint as IRouteConstraint;

            if (constraint2 != null)
            {
                return(constraint2.Match(request, this, parameterName, values, routeDirection));
            }
            string str = constraint as string;

            if (str == null)
            {
                throw new InvalidOperationException(string.Format(Route_ValidationMustBeStringOrCustomConstraint,
                                                                  new object[] { parameterName, this.Url }));
            }
            values.TryGetValue(parameterName, out obj2);
            string input   = Convert.ToString(obj2, CultureInfo.InvariantCulture);
            string pattern = "^(" + str + ")$";

            return(Regex.IsMatch(input, pattern, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase));
        }
Esempio n. 11
0
 /// <summary>
 /// Called when some part of the response is read. This method will not be called if the <see cref="UrlRequestFlags.NoDownloadData"/> flag is set on the request.
 /// </summary>
 /// <param name="request">request</param>
 /// <param name="data">A stream containing the bytes received since the last call. Cannot be used outside the scope of this method. </param>
 protected virtual void OnDownloadData(IUrlRequest request, Stream data)
 {
 }
Esempio n. 12
0
 /// <summary>
 /// Called when some part of the response is read. This method will not be called if the <see cref="UrlRequestFlags.NoDownloadData"/> flag is set on the request.
 /// </summary>
 /// <param name="request">request</param>
 /// <param name="data">A stream containing the bytes received since the last call. Cannot be used outside the scope of this method. </param>
 void IUrlRequestClient.OnDownloadData(IUrlRequest request, Stream data)
 {
     OnDownloadData(request, data);
 }
Esempio n. 13
0
 public static void ResolveContext(IUrlRequest request, Action <IRoutingContext> contextCallback)
 {
     Guard.ArgumentNotNull(request, "request");
     Guard.ArgumentNotNull(contextCallback, "contextCallback");
     OnResolveRequest(request, true, (c, s) => contextCallback(c));
 }
 public SiteMapException(string message, string siteMapNode, IUrlRequest request, Exception innerException)
     : base(message, innerException)
 {
     _siteMapNode = siteMapNode;
     _request     = request;
 }
Esempio n. 15
0
 protected override void OnDownloadData(IUrlRequest request, Stream data)
 {
     logic.OnDownloadData(data);
 }
 public UrlResponse(IUrlRequest request, ResponseStatus responseStatus, Exception error)
     : this(request, responseStatus, null, null, error)
 {
 }
 public UrlResponse(IUrlRequest request, ResponseStatus responseStatus,
                    Object content, ParametersCollection responseParameters)
     : this(request, responseStatus, content, responseParameters, null)
 {
 }
Esempio n. 18
0
 /// <summary>
 /// Notifies the client of download progress.
 /// </summary>
 /// <param name="request">request</param>
 /// <param name="current">denotes the number of bytes received up to the call </param>
 /// <param name="total">is the expected total size of the response (or -1 if not determined).</param>
 void IUrlRequestClient.OnDownloadProgress(IUrlRequest request, long current, long total)
 {
     OnDownloadProgress(request, current, total);
 }
Esempio n. 19
0
 /// <summary>
 /// Notifies the client of download progress.
 /// </summary>
 /// <param name="request">request</param>
 /// <param name="current">denotes the number of bytes received up to the call </param>
 /// <param name="total">is the expected total size of the response (or -1 if not determined).</param>
 protected virtual void OnDownloadProgress(IUrlRequest request, long current, long total)
 {
 }
Esempio n. 20
0
 /// <inheritdoc/>
 protected override void OnDownloadData(IUrlRequest request, Stream data)
 {
     onDownloadData?.Invoke(request, data);
 }
Esempio n. 21
0
 /// <inheritdoc/>
 protected override void OnRequestComplete(IUrlRequest request)
 {
     onRequestComplete?.Invoke(request);
 }
Esempio n. 22
0
        //This method should provide the response for the specified request
        public IUrlResponse Handle(IUrlRequest request)
        {
            string htmlContent = "Request Url: " + request.Url + "\n";

            return(new UrlResponse(Encoding.UTF8.GetBytes(htmlContent)));
        }
 public SiteMapException(string message, string siteMapNode, IUrlRequest request)
     : this(message, siteMapNode, request, null)
 {
 }
Esempio n. 24
0
 void IUrlRequestClient.OnRequestComplete(IUrlRequest request)
 {
     this?.completeAction(request, responseBody.ToArray());
 }
Esempio n. 25
0
 /// <inheritdoc/>
 protected override void OnUploadProgress(IUrlRequest request, long current, long total)
 {
     onUploadProgress?.Invoke(request, current, total);
 }
Esempio n. 26
0
        private static ResponseStatus OnResolveRoute(IUrlRequest request, bool throwException, out IRoutingContext context)
        {
            Guard.ArgumentNotNull(request, "request");
            Guard.ArgumentValue((!ValidateUrl(request.RequestUrl, false)), "request", INVALID_REQUEST_URL);

            // default value
            context = null;

            // we check the url
            if (!ValidateUrl(request.RequestUrl, throwException))
            {
                return(ResponseStatus.UrlInvalid);
            }

            // we get the route data first
            RouteData routeData = RouteTable.Routes.GetRouteData(request);

            if (routeData == null)
            {
                if (throwException)
                {
                    throw new InvalidOperationException(NO_ROUTE_MATCHES);
                }
                return(ResponseStatus.UrlNotFound);
            }

            // we get the route handler
            IRouteHandler routeHandler = routeData.RouteHandler;

            if (routeHandler == null)
            {
                if (throwException)
                {
                    throw new InvalidOperationException(NO_ROUTE_HANDLER);
                }
                return(ResponseStatus.HandlerNotFound);
            }

            // we merge the dictionaries (into the request parameters)
            var _requestParameters = new ParametersCollection();

            // we add the data-tokens specified with route, n_ote these can be overriden
            if (routeData.DataTokens != null && routeData.DataTokens.Count > 0)
            {
                // we add the values, from the routes data, if it exists then we update the value
                foreach (var _parameter in routeData.DataTokens)
                {
                    _requestParameters.Add(_parameter.Key, _parameter.Value);
                }
            }

            // we add the values found in the url merged with the default values, n_ote these can be overriden
            if (routeData.Values != null && routeData.Values.Count > 0)
            {
                // we add the values, from the routes data, if it exists then we update the value
                foreach (var _parameter in routeData.Values)
                {
                    if (_requestParameters.ContainsKey(_parameter.Key))
                    {
                        _requestParameters[_parameter.Key] = _parameter.Value;
                    }
                    else
                    {
                        _requestParameters.Add(_parameter.Key, _parameter.Value);
                    }
                }
            }

            // and our passed in parameters will override any existing entry
            if (request.RequestParameters != null && request.RequestParameters.Count > 0)
            {
                foreach (var _parameter in request.RequestParameters)
                {
                    if (_requestParameters.ContainsKey(_parameter.Key))
                    {
                        _requestParameters[_parameter.Key] = _parameter.Value;
                    }
                    else
                    {
                        _requestParameters.Add(_parameter.Key, _parameter.Value);
                    }
                }
            }

            // we setup the request cotext and get the response
            context = new RoutingContext(request, routeData, _requestParameters);
            return(ResponseStatus.Success);
        }
Esempio n. 27
0
 void IUrlRequestClient.OnDownloadData(IUrlRequest request, Stream data)
 {
     data.CopyTo(responseBody);
 }
Esempio n. 28
0
 /// <summary>
 /// Notifies the client that the request has completed.
 /// Use the <see cref="IUrlRequest.RequestStatus"/> property to determine if the
 /// request was successful or not.
 /// </summary>
 /// <param name="request">request</param>
 void IUrlRequestClient.OnRequestComplete(IUrlRequest request)
 {
     OnRequestComplete(request);
 }
Esempio n. 29
0
 void IUrlRequestClient.OnUploadProgress(IUrlRequest request, long current, long total)
 {
 }
Esempio n. 30
0
 /// <summary>
 /// Notifies the client that the request has completed.
 /// Use the <see cref="IUrlRequest.RequestStatus"/> property to determine if the
 /// request was successful or not.
 /// </summary>
 /// <param name="request">request</param>
 protected virtual void OnRequestComplete(IUrlRequest request)
 {
 }