/// <summary> /// The process request async. /// </summary> /// <param name="request"> /// The request. /// </param> /// <param name="callback"> /// The callback. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback) { var uri = new Uri(request.Url); var fileName = uri.AbsolutePath; var u = new Uri(request.Url); var file = u.Authority + u.AbsolutePath; _fileInfo = new FileInfo(file); // Check if file exists if (!_fileInfo.Exists) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } // Check if file exists but empty else if (_fileInfo.Length == 0) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } else { Task.Run(() => { using (callback) { _chromelyResource.Content = null; _chromelyResource.MimeType = "text/html"; try { byte[] fileBytes = File.ReadAllBytes(file); _chromelyResource.Content = new MemoryStream(fileBytes); string extension = Path.GetExtension(file); _chromelyResource.MimeType = MimeMapper.GetMimeType(extension); } catch (Exception exception) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception); } if (_chromelyResource.Content == null) { callback.Cancel(); } else { SetResponseInfoOnSuccess(); callback.Continue(); } } }); } return(CefReturnValue.ContinueAsync); }
/// <summary> /// The process request async. /// </summary> /// <param name="request"> /// The request. /// </param> /// <param name="callback"> /// The callback. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback) { var u = new Uri(request.Url); var fileAbsolutePath = u.AbsolutePath; var file = u.Authority + fileAbsolutePath; _fileInfo = new FileInfo(file); // Check if file exists if (!_fileInfo.Exists) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } // Check if file exists but empty else if (_fileInfo.Length == 0) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } else { Task.Run(() => { using (callback) { _chromelyResource.Content = null; _chromelyResource.MimeType = "text/html"; try { if (!ProcessAssmblyEmbeddedFile(request.Url, file, fileAbsolutePath)) { ProcessLocalFile(file); } } catch (Exception exception) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception); } if (_chromelyResource.Content == null) { callback.Cancel(); } else { SetResponseInfoOnSuccess(); callback.Continue(); } } }); } return(CefReturnValue.ContinueAsync); }
protected override bool ProcessRequest(CefRequest request, CefCallback callback) { var u = new Uri(request.Url); var file = u.Authority + u.AbsolutePath; _totalBytesRead = 0; _chromelyResource.Content = null; _completed = false; _fileInfo = new FileInfo(file); // Check if file exists if (!_fileInfo.Exists) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } // Check if file exists but empty else if (_fileInfo.Length == 0) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } else { Task.Run(() => { using (callback) { try { var fileBytes = File.ReadAllBytes(file); _chromelyResource.Content = new MemoryStream(fileBytes); string extension = Path.GetExtension(file); _chromelyResource.MimeType = MimeMapper.GetMimeType(extension); _chromelyResource.StatusCode = ResourceConstants.StatusOK; _chromelyResource.StatusText = ResourceConstants.StatusOKText; } catch (Exception exception) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception); } finally { callback.Continue(); } } }); return(true); } callback.Dispose(); return(false); }
protected override void GetResponseHeaders(CefResponse response, out long responseLength, out string redirectUrl) { // unknown content-length // no-redirect responseLength = -1; redirectUrl = null; try { var headers = response.GetHeaderMap(); headers.Add("Access-Control-Allow-Origin", "*"); response.SetHeaderMap(headers); response.Status = (int)_chromelyResource.StatusCode; response.MimeType = _chromelyResource.MimeType; response.StatusText = _chromelyResource.StatusText; } catch (Exception exception) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception); response.Status = (int)_chromelyResource.StatusCode; response.MimeType = _chromelyResource.MimeType; response.StatusText = _chromelyResource.StatusText; } }
protected override bool ProcessRequest(CefRequest request, CefCallback callback) { var isSchemeRegistered = _requestSchemeProvider?.IsSchemeRegistered(request.Url); if (isSchemeRegistered.HasValue && isSchemeRegistered.Value) { var uri = new Uri(request.Url); var path = uri.LocalPath; bool isRequestAsync = _routeProvider.IsActionRouteAsync(path); if (isRequestAsync) { ProcessRequestAsync(path); } else { ProcessRequest(path); } return(true); } else { _chromelyResponse = _chromelyErrorHandler.HandleRouteNotFound(request.Identifier.ToString(), request.Url); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } callback.Dispose(); return(false); #region Process Request void ProcessRequest(string path) { Task.Run(() => { using (callback) { try { if (string.IsNullOrWhiteSpace(path)) { _chromelyResponse = _chromelyErrorHandler.HandleRouteNotFound(request.Identifier.ToString(), path); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } else { var parameters = request.Url.GetParameters(request.ReferrerURL); var postData = GetPostData(request); var jsonRequest = _serializerUtil.ObjectToJson(request); _chromelyResponse = _requestTaskRunner.Run(request.Identifier.ToString(), path, parameters, postData, jsonRequest); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } } catch (Exception exception) { var chromelyRequest = new ChromelyRequest() { Id = request.Identifier.ToString(), RouteUrl = request.Url }; _chromelyResponse = _chromelyErrorHandler.HandleError(chromelyRequest, exception); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } finally { callback.Continue(); } } }); } #endregion #region Process Request Async void ProcessRequestAsync(string path) { Task.Run(async() => { using (callback) { try { if (string.IsNullOrWhiteSpace(path)) { _chromelyResponse = _chromelyErrorHandler.HandleRouteNotFound(request.Identifier.ToString(), path); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } else { var parameters = request.Url.GetParameters(request.ReferrerURL); var postData = GetPostData(request); var jsonRequest = _serializerUtil.ObjectToJson(request); _chromelyResponse = await _requestTaskRunner.RunAsync(request.Identifier.ToString(), path, parameters, postData, jsonRequest); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } } catch (Exception exception) { var chromelyRequest = new ChromelyRequest() { Id = request.Identifier.ToString(), RouteUrl = request.Url }; _chromelyResponse = _chromelyErrorHandler.HandleError(chromelyRequest, exception); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } finally { callback.Continue(); } } }); } #endregion }
/// <summary> /// The process request async. /// </summary> /// <param name="request"> /// The request. /// </param> /// <param name="callback"> /// The callback. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public override CefReturnValue ProcessRequestAsync(CefRequest request, CefCallback callback) { var uri = new Uri(request.Url); var scheme = _config.UrlSchemes.GetScheme(request.Url); var isFolderResourceScheme = scheme is not null && scheme.IsUrlSchemeFolderResource(); var u = new Uri(request.Url); var file = isFolderResourceScheme ? scheme.GetResourceFolderFile(u.AbsolutePath) : u.Authority + u.AbsolutePath; _fileInfo = new FileInfo(file); // Check if file exists if (!_fileInfo.Exists) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } // Check if file exists but empty else if (_fileInfo.Length == 0) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo); callback.Continue(); } else { Task.Run(() => { using (callback) { _chromelyResource.Content = null; _chromelyResource.MimeType = "text/html"; try { byte[] fileBytes = File.ReadAllBytes(file); _chromelyResource.Content = new MemoryStream(fileBytes); string extension = Path.GetExtension(file); _chromelyResource.MimeType = MimeMapper.GetMimeType(extension); _chromelyResource.StatusCode = ResourceConstants.StatusOK; _chromelyResource.StatusText = ResourceConstants.StatusOKText; } catch (Exception exception) { _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception); } if (_chromelyResource.Content is null) { callback.Cancel(); } else { SetResponseInfoOnSuccess(); callback.Continue(); } } }); } return CefReturnValue.ContinueAsync; }
/// <summary> /// The process request async. /// </summary> /// <param name="request"> /// The request. /// </param> /// <param name="callback"> /// The callback. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public override CefReturnValue ProcessRequestAsync(CefRequest request, CefCallback callback) { var scheme = _requestSchemeProvider?.GetScheme(request.Url); if (scheme is not null && scheme.UrlSchemeType == UrlSchemeType.LocalRequest) { _stream = Stream.Null; var uri = new Uri(request.Url); var path = uri.LocalPath; _mimeType = "application/json"; bool isRequestAsync = _routeProvider.IsRouteAsync(path); if (isRequestAsync) { ProcessRequestAsync(path); } else { ProcessRequest(path); } } return(CefReturnValue.ContinueAsync); #region Process Request void ProcessRequest(string path) { Task.Run(() => { using (callback) { try { var response = new ChromelyResponse(); if (string.IsNullOrEmpty(path)) { _chromelyResponse = _chromelyErrorHandler.HandleRouteNotFound(request.Identifier.ToString(), path); } else { var parameters = request.Url.GetParameters(); var postData = GetPostData(request); var jsonRequest = _dataTransferOptions.ConvertObjectToJson(request); _chromelyResponse = _requestHandler.Execute(request.Identifier.ToString(), path, parameters, postData, jsonRequest); string?jsonData = _dataTransferOptions.ConvertResponseToJson(_chromelyResponse.Data); if (jsonData is not null) { var content = Encoding.UTF8.GetBytes(jsonData); _stream = new MemoryStream(); _stream.Write(content, 0, content.Length); } } } catch (Exception exception) { _stream = Stream.Null; var chromelyRequest = new ChromelyRequest() { Id = request.Identifier.ToString(), RouteUrl = request.Url }; _chromelyResponse = _chromelyErrorHandler.HandleError(chromelyRequest, exception); } if (_stream is null) { callback.Cancel(); } else { SetResponseInfoOnSuccess(); callback.Continue(); } } }); } #endregion #region Process Request Async void ProcessRequestAsync(string path) { Task.Run(async() => { using (callback) { try { var response = new ChromelyResponse(); if (string.IsNullOrEmpty(path)) { _chromelyResponse = _chromelyErrorHandler.HandleRouteNotFound(request.Identifier.ToString(), path); } else { var parameters = request.Url.GetParameters(request.ReferrerURL); var postData = GetPostData(request); var jsonRequest = _dataTransferOptions.ConvertObjectToJson(request); _chromelyResponse = await _requestHandler.ExecuteAsync(request.Identifier.ToString(), path, parameters, postData, jsonRequest); string?jsonData = _dataTransferOptions.ConvertResponseToJson(_chromelyResponse.Data); if (jsonData is not null) { var content = Encoding.UTF8.GetBytes(jsonData); _stream = new MemoryStream(); _stream.Write(content, 0, content.Length); } } } catch (Exception exception) { _stream = Stream.Null; var chromelyRequest = new ChromelyRequest() { Id = request.Identifier.ToString(), RouteUrl = request.Url }; _chromelyResponse = _chromelyErrorHandler.HandleError(chromelyRequest, exception); } if (_stream is null) { callback.Cancel(); } else { SetResponseInfoOnSuccess(); callback.Continue(); } } }); } #endregion }