public override bool OnQuery(CefBrowser browser, CefFrame frame, long queryId, string request, bool persistent, CefMessageRouterBrowserSide.Callback callback) { var options = new JsonSerializerOptions(); options.ReadCommentHandling = JsonCommentHandling.Skip; options.AllowTrailingCommas = true; var requestData = JsonSerializer.Deserialize <request>(request, options); var method = requestData.method ?? string.Empty; if (RoutePath.ValidMethod(method)) { var id = requestData.id ?? string.Empty; var path = requestData.url ?? string.Empty; var routePath = new RoutePath(method, path); bool isRequestAsync = ServiceRouteProvider.IsActionRouteAsync(_container, routePath); if (isRequestAsync) { Task.Run(async() => { var parameters = requestData.parameters; var postData = requestData.postData; var response = await _requestTaskRunner.RunAsync(id, routePath, parameters, postData, request); var jsonResponse = response.ToJson(); callback.Success(jsonResponse); }); } else { Task.Run(() => { var parameters = requestData.parameters; var postData = requestData.postData; var response = _requestTaskRunner.Run(id, routePath, parameters, postData, request); var jsonResponse = response.ToJson(); callback.Success(jsonResponse); }); } return(true); } callback.Failure(100, "Request is not valid."); return(false); }
protected override bool ProcessRequest(CefRequest request, CefCallback callback) { var isCustomScheme = _config?.UrlSchemes?.IsUrlRegisteredCustomScheme(request.Url); if (isCustomScheme.HasValue && isCustomScheme.Value) { var uri = new Uri(request.Url); var path = uri.LocalPath; bool isRequestAsync = ServiceRouteProvider.IsActionRouteAsync(_container, new RoutePath(request.Method, path)); if (isRequestAsync) { ProcessRequestAsync(path); } else { ProcessRequest(path); } return(true); } Logger.Instance.Log.Error($"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)System.Net.HttpStatusCode.BadRequest; response.StatusText = "Bad Request"; _chromelyResponse = response; } else { var parameters = request.Url.GetParameters(); var postData = GetPostData(request); _chromelyResponse = _requestTaskRunner.Run(request.Method, path, parameters, postData); string jsonData = _chromelyResponse.Data.EnsureResponseDataIsJsonFormat(); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } } catch (Exception exception) { Logger.Instance.Log.Error(exception); _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); _chromelyResponse = await _requestTaskRunner.RunAsync(request.Method, path, parameters, postData); string jsonData = _chromelyResponse.Data.EnsureResponseDataIsJsonFormat(); _responseBytes = Encoding.UTF8.GetBytes(jsonData); } } catch (Exception exception) { Logger.Instance.Log.Error(exception); _chromelyResponse = new ChromelyResponse { Status = (int)HttpStatusCode.BadRequest, Data = "An error occured." }; } finally { callback.Continue(); } } }); } #endregion }