public virtual IChromelyResponse HandleError(IChromelyRequest request, IChromelyResponse response, Exception exception) { Logger.Instance.Log.LogError(exception, exception.Message); return(new ChromelyResponse { RequestId = request?.Id, ReadyState = (int)ReadyState.ResponseIsReady, Status = (int)System.Net.HttpStatusCode.BadRequest, StatusText = "An error has occurred" }); }
public void Get2InvokeTest() { BaseTest(); string routeKey = RouteKey.CreateRequestKey("/testcontroller/movies/2"); var routeGet2 = _requestActionRouteDictionary[routeKey]; Assert.NotNull(routeGet2); IChromelyResponse response = routeGet2.Invoke(new ChromelyRequest("/testcontroller/movies/2", null, null)); Assert.NotNull(response); Assert.True(response.Data is string); Assert.Equal("Test Get 2", (string)response.Data); }
public DefaultRequestSchemeHandler(IChromelyRouteProvider routeProvider, IChromelyRequestSchemeProvider requestSchemeProvider, IChromelyRequestHandler requestHandler, IChromelyDataTransferOptions dataTransferOptions, IChromelyErrorHandler chromelyErrorHandler) { _routeProvider = routeProvider; _requestSchemeProvider = requestSchemeProvider; _requestHandler = requestHandler; _dataTransferOptions = dataTransferOptions; _chromelyErrorHandler = chromelyErrorHandler; _chromelyResponse = new ChromelyResponse(); _mimeType = ResourceHandler.DefaultMimeType; _stream = Stream.Null; }
public string Execute(string path, object parameters = null, object postData = null) { IChromelyResponse response = null; bool isRequestAsync = _routeProvider.IsActionRouteAsync(path); if (isRequestAsync) { var task = Task.Run(async() => { return(await _requestTaskRunner.RunAsync(path, parameters.ToDictionary(), postData)); }); task.Wait(); response = task.Result; } else { response = _requestTaskRunner.Run(path, parameters.ToDictionary(), postData); } return(response == null ? string.Empty : _serializerUtil.ObjectToJson(response)); }
/// <inheritdoc/> public virtual IChromelyResponse HandleError(IChromelyRequest request, IChromelyResponse response, Exception?exception = null) { if (exception is not null) { Logger.Instance.Log.LogError(exception); } var localResponse = new ChromelyResponse { ReadyState = (int)ReadyState.ResponseIsReady, Status = (int)System.Net.HttpStatusCode.BadRequest, StatusText = "An error has occurred" }; localResponse.RequestId = (request is not null && string.IsNullOrWhiteSpace(request.Id)) ? request.Id : localResponse.RequestId; return(localResponse); }
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 }
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); } Logger.Instance.Log.LogWarning($"Url {request.Url} is not of a registered custom scheme."); callback.Dispose(); return(false); #region Process Request void ProcessRequest(string path) { Task.Run(() => { using (callback) { try { var response = new ChromelyResponse(); if (string.IsNullOrEmpty(path)) { response.ReadyState = (int)ReadyState.ResponseIsReady; response.Status = (int)HttpStatusCode.BadRequest; response.StatusText = "Bad Request"; _chromelyResponse = response; } else { var parameters = request.Url.GetParameters(); 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) { Logger.Instance.Log.LogError(exception, exception.Message); _chromelyResponse = new ChromelyResponse { Status = (int)HttpStatusCode.BadRequest, Data = "An error occured." }; } finally { 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)) { response.ReadyState = (int)ReadyState.ResponseIsReady; response.Status = (int)System.Net.HttpStatusCode.BadRequest; response.StatusText = "Bad Request"; _chromelyResponse = response; } else { var parameters = request.Url.GetParameters(); 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) { Logger.Instance.Log.LogError(exception, exception.Message); _chromelyResponse = new ChromelyResponse { Status = (int)HttpStatusCode.BadRequest, Data = "An error occured." }; } 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 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 }
/// <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 scheme = _requestSchemeHandlerProvider?.GetScheme(request.Url); if (scheme != null && scheme.UrlSchemeType == UrlSchemeType.LocalRquest) { _stream = null; var uri = new Uri(request.Url); var path = uri.LocalPath; _mimeType = "application/json"; bool isRequestAsync = _routeProvider.IsActionRouteAsync(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)) { response.ReadyState = (int)ReadyState.ResponseIsReady; response.Status = (int)System.Net.HttpStatusCode.BadRequest; response.StatusText = "Bad Request"; _chromelyResponse = response; } else { var parameters = request.Url.GetParameters(); var postData = request.GetPostData(); _chromelyResponse = _requestTaskRunner.Run(path, parameters, postData); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); var content = Encoding.UTF8.GetBytes(jsonData); _stream = new MemoryStream(); _stream.Write(content, 0, content.Length); } } catch (Exception exception) { _stream = null; Logger.Instance.Log.LogError(exception, exception.Message); _chromelyResponse = new ChromelyResponse { Status = (int)HttpStatusCode.BadRequest, Data = "An error occured." }; } if (_stream == 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)) { response.ReadyState = (int)ReadyState.ResponseIsReady; response.Status = (int)System.Net.HttpStatusCode.BadRequest; response.StatusText = "Bad Request"; _chromelyResponse = response; } else { var parameters = request.Url.GetParameters(); var postData = request.GetPostData(); _chromelyResponse = await _requestTaskRunner.RunAsync(path, parameters, postData); string jsonData = _serializerUtil.EnsureResponseDataIsJson(_chromelyResponse.Data); var content = Encoding.UTF8.GetBytes(jsonData); _stream = new MemoryStream(); _stream.Write(content, 0, content.Length); } } catch (Exception exception) { _stream = null; Logger.Instance.Log.LogError(exception, exception.Message); _chromelyResponse = new ChromelyResponse { Status = (int)HttpStatusCode.BadRequest, Data = "An error occured." }; } if (_stream == null) { callback.Cancel(); } else { SetResponseInfoOnSuccess(); callback.Continue(); } } }); } #endregion }