public RouteConditionData(OwinEnv env, RouteParameters routeParameters, Route route, object conditionData)
 {
     OwinEnv         = env;
     RouteParameters = routeParameters;
     Route           = route;
     ConditionData   = conditionData;
 }
Пример #2
0
 private Task InfoAppFunc(OwinEnv env)
 {
     // Don't do this in real code!
     return(Task.Factory.StartNew(() => {
         // show info page
     }));
 }
Пример #3
0
        public static void DoesNotRouteTo(OwinEnv owinEnv, AppFunc action, Routes routes)
        {
            var router = new Router();

            router.AddRoutes(routes);
            var result = router.Resolve(owinEnv);

            Assert.False(result.Success);
        }
Пример #4
0
        public static void RoutesTo(OwinEnv owinEnv, AppFunc action, Routes routes)
        {
            var router = new Router();

            router.AddRoutes(routes);
            var result = router.Resolve(owinEnv);

            Assert.True(result.Success);
            Assert.True(action.Equals(result.Route.OwinAction));
        }
Пример #5
0
        protected bool RoutesTo(
            Route correctEntry,
            IEnumerable <Route> otherEntries,
            OwinEnv request
            )
        {
            Router router = new Router();

            router.AddRoute(correctEntry);
            var entry = router.Resolve(request);

            return(entry.Route == correctEntry);
        }
Пример #6
0
        protected bool DoesNotRouteTo(
            Route correctEntry,
            OwinEnv request
            )
        {
            Router router = new Router();

            router.AddRoute(correctEntry);
            var entry = router.Resolve(request);

            if (entry == null)
            {
                return(true);
            }

            return(entry.Route != correctEntry);
        }
Пример #7
0
        private bool CheckConditions(Route route, OwinEnv env, IDictionary <string, RouteValue> parameters)
        {
            if (route.Conditions == null)
            {
                return(true);
            }

            foreach (var condition in route.Conditions)
            {
                if (!condition.Condition(new RouteConditionData(env, parameters, route, condition.Data)))
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #8
0
        public void StoringArbitraryData(OwinEnv owinEnironment)
        {
            var route = new Route("GET", "/customers/show/{id}", App);

            route.Data["CacheOptions"] = new CacheOptions(/* options */);

            var router = new Router();

            router.AddRoute(route);

            var result       = router.Resolve(FakeRequest.Get("/customers/show/{id}"));
            var cacheOptions = (CacheOptions)route.Data["CacheOptions"];

            // Add Caching Options to HTTP-Header

            result.Route.OwinAction.Invoke(owinEnironment);
        }
Пример #9
0
        /// <summary>
        /// Finds a route for the request.
        /// </summary>
        public ResolveResult Internal_Resolve(OwinEnv env, Func <Route, bool> predicate = null)
        {
            var path                   = env ["owin.RequestPath"] as string;
            var method                 = env["owin.RequestMethod"] as string;
            var candidates             = _routes.GetCandidates(path, method);
            var segments               = path.Substring(1, path.Length - 1).Split('/');
            var routesWithMatchingPath = new List <MatchingRoute>();

            foreach (var route in candidates)
            {
                IDictionary <string, RouteValue> parameters;

                if (!PathMatcher.Matches(route, segments, out parameters))
                {
                    continue;
                }

                routesWithMatchingPath.Add(new MatchingRoute(route, parameters));
            }

            foreach (var item in routesWithMatchingPath.OrderByDescending(x => x.Route.Priority))
            {
                if (!CheckConditions(item.Route, env, item.Parameters))
                {
                    continue;
                }

                if (!CheckParameterConditions(item.Route, item.Parameters))
                {
                    continue;
                }

                if (predicate != null && !predicate.Invoke(item.Route))
                {
                    continue;
                }

                return(ResolveResult.RouteFound(item.Route, item.Parameters));
            }

            return(ResolveResult.NoResult());
        }
        public void Owin_Environment_is_passed_to_condition_function()
        {
            var     route           = new Route("GET", "/test", App);
            OwinEnv receivedOwinEnv = null;

            route.AddCondition(new RouteCondition(data => {
                receivedOwinEnv = data.OwinEnv;
                return(true);
            }));

            var router = new Router();

            router.AddRoute(route);

            var owinEnv = Utils.BuildGetRequest("/test");

            owinEnv["test"] = true;

            router.Resolve(owinEnv);
            Assert.Equal(true, receivedOwinEnv["test"]);
        }
Пример #11
0
        public Task ProcessRequest(OwinEnv env)
        {
            var router = new Router();
            var route  = new Route("GET", "/products/{id}-{name}.html", InfoAppFunc);

            router.AddRoute(route);

            var result = router.Resolve(env);

            if (result.Success)
            {
                var id   = result.Parameters["id"];
                var name = result.Parameters["name"];
                return(result.Route.OwinAction(env));                //Call the AppFunc
            }
            else
            {
                // Do something else
                throw new Exception();
            }
        }
Пример #12
0
 private static Task InfoAppFunc(OwinEnv env)
 {
     return(Task.Factory.StartNew(() => {
         // show info page
     }));
 }
Пример #13
0
 public ResolveResult Resolve(OwinEnv env, Func <Route, bool> predicate)
 {
     return(Internal_Resolve(env, predicate));
 }
Пример #14
0
 public ResolveResult Resolve(OwinEnv env)
 {
     return(Internal_Resolve(env, null));
 }