public override async Task Invoke(IOwinContext context) { var bodyStream = context.Request.Body; var sr = new StreamReader(bodyStream); var body = sr.ReadToEnd(); string queryStringPaths = null; string queryStringMethod = null; dynamic jsonGraph = null; if (string.IsNullOrEmpty(body)) { queryStringPaths = context.Request.Query["paths"]; queryStringMethod = context.Request.Query["method"]; } else { var parts = body.Split('&'); var jsonGraphEnvelopeString = parts[0].Split('=')[1]; dynamic jsonGraphEnvelope = JsonConvert.DeserializeObject(jsonGraphEnvelopeString); queryStringPaths = JsonConvert.SerializeObject(jsonGraphEnvelope.paths); queryStringMethod = parts[1].Split('=')[1]; jsonGraph = jsonGraphEnvelope.jsonGraph; } var method = queryStringMethod == "get" ? FalcorMethod.Get : queryStringMethod == "set" ? FalcorMethod.Set : FalcorMethod.Call; var paths = FalcorRouterConfiguration.PathParser.ParseMany(queryStringPaths); var request = new FalcorRequest(method, paths, jsonGraph); var response = await RouterConfiguration.Router.RouteAsync(request); var jsonResponse = FalcorRouterConfiguration.ResponseSerializer.Serialize(response); context.Response.Headers.Set("content-type", "application/json"); await context.Response.WriteAsync(jsonResponse); }
public void GetFoo() { var router = new TestFalcorRouter(); var request = FalcorRequest.Get("foo"); var response = router.RouteAsync(request).Result; Assert.Equal("bar", response.JsonGraph["foo"]); }
public void SetSingleValue() { var router = new TestFalcorRouter(); var jsonGraphEnvelopeString = "{\"jsonGraph\":{\"todos\":{\"1\":{\"done\":false}}},\"paths\":[[\"todos\",1,\"done\"]]}"; dynamic jsonGraphEnvelope = JsonConvert.DeserializeObject(jsonGraphEnvelopeString); var paths = FalcorRouterConfiguration.PathParser.ParseMany(JsonConvert.SerializeObject(jsonGraphEnvelope.paths)); var falcorRequest = new FalcorRequest(FalcorMethod.Set, paths, jsonGraphEnvelope.jsonGraph); var falcorResponse = router.RouteAsync(falcorRequest).Result; Assert.Equal(((Dictionary <string, object>)falcorResponse.JsonGraph["todos"]) .Any(kv1 => kv1.Key.Equals("1") && ((Dictionary <string, object>)kv1.Value) .Any(kv2 => kv2.Key.Equals("done") && ((Atom)kv2.Value).Value.Equals(false))), true); }
public override async Task Invoke(IOwinContext context) { var queryStringPaths = context.Request.Query["paths"]; var queryStringMethod = context.Request.Query["method"]; var method = queryStringMethod == "get" ? FalcorMethod.Get : queryStringMethod == "set" ? FalcorMethod.Set : FalcorMethod.Call; var paths = FalcorRouterConfiguration.PathParser.ParseMany(queryStringPaths); var request = new FalcorRequest(method, paths); var response = await RouterConfiguration.Router.RouteAsync(request); var jsonResponse = FalcorRouterConfiguration.ResponseSerializer.Serialize(response); context.Response.Headers.Set("content-type", "application/json"); await context.Response.WriteAsync(jsonResponse); }
public void GetWithIntegers() { var router = new TestFalcorRouter(); var request = FalcorRequest.Get("foo", new NumericSet(1, 2, 3), "name"); var response = router.RouteAsync(request).Result; var foos = (Dictionary <string, object>)response.JsonGraph["foo"]; Assert.Equal(3, foos.Count); Assert.Equal(new List <string> { "1", "2", "3" }, foos.Select(kv => kv.Key)); Assert.Equal(new List <string> { "Jill-1", "Jill-2", "Jill-3" }, foos.Select(kv => ((Dictionary <string, object>)kv.Value)["name"])); }
public Task <FalcorResponse> RouteAsync(FalcorRequest request) => RoutingEngine.RouteAsync(request);