Esempio n. 1
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            this.ContentRootPath = env.ContentRootPath ?? Directory.GetCurrentDirectory();

            app.UseEndpoints((endpoints) =>
            {
                foreach (var route in Routes)
                {
                    endpoints.Map(route.path, context =>
                    {
                        //create dic from actual URL params according to route.path
                        var dic           = new DynamicDictionary();
                        var routeTemplate = TemplateParser.Parse(route.path);
                        var matcher       = new TemplateMatcher(routeTemplate, null);
                        var values        = new RouteValueDictionary();
                        if (matcher.TryMatch(context.Request.Path, values))
                        {
                            foreach (var item in values)
                            {
                                //Console.WriteLine("{0}: {1}", item.Key, item.Value);
                                dic.Add(item.Key, item.Value);
                            }
                        }

                        dynamic result = route.func.Invoke(context, dic);
                        return(WriteActionResult(context, result));
                    });
                }
                foreach (var route in AsyncRoutes)
                {
                    endpoints.Map(route.path, async context =>
                    {
                        //create dic from actual URL params according to route.path
                        var dic           = new DynamicDictionary();
                        var routeTemplate = TemplateParser.Parse(route.path);
                        var matcher       = new TemplateMatcher(routeTemplate, null);
                        var values        = new RouteValueDictionary();
                        if (matcher.TryMatch(context.Request.Path, values))
                        {
                            foreach (var item in values)
                            {
                                //Console.WriteLine("{0}: {1}", item.Key, item.Value);
                                dic.Add(item.Key, item.Value);
                            }
                        }

                        var result = await route.func.Invoke(context, dic);
                        await WriteActionResult(context, result);
                    });
                }
            });
        }