Ejemplo n.º 1
0
        public HomeModule(IViewProjectionFactory viewFactory, ISpamShieldService spamShield, ICommandInvokerFactory commandInvokerFactory)
            : base(viewFactory)
        {
            _viewFactory = viewFactory;
            _commandInvokerFactory = commandInvokerFactory;

            Get["/"] = p =>
                ReturnHomeAction(new RecentBlogPostsBindingModel() { Page = 1, Take = 10 });

            Get["/page/{page:int}"] = p =>
                ReturnHomeAction(new RecentBlogPostsBindingModel() { Page = p.page, Take = 10 });

            Get["/tag/{Tag}"] = p =>
                ReturnArticlesTaggedBy(new TaggedBlogPostsBindingModel() { Tag = p.tag });

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])/(?<titleslug>[a-zA-Z0-9_-]+)"] = p =>
                ReturnArticle(new BlogPostDetailsBindingModel { Permalink = p.titleslug }, spamShield);//TODO:需要增加对日期有效性的验证

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])"] = p =>
                                                {
                                                    var input = new IntervalBlogPostsBindingModel
                                                    {
                                                        FromDate = new DateTime(p.year, p.month, 1)
                                                    };

                                                    input.ToDate = input.FromDate.AddMonths(1);

                                                    return ReturnArticles(input);
                                                };

            Post["/spam/hash/{tick}"] = p => spamShield.GenerateHash(p.tick);

            Post["/comment/(?<titleslug>[a-zA-Z0-9_-]+)"] = p => ReturnAddComment(p);
        }
Ejemplo n.º 2
0
        public HomeModule(IViewProjectionFactory viewFactory) : base(viewFactory)
        {
            Get["/"] = o =>
                       ReturnHomeAction(new RecentBlogPostsBindingModel()
            {
                Page = 1
            });

            Get["/page/{page?1}"] = o =>
                                    ReturnHomeAction(new RecentBlogPostsBindingModel()
            {
                Page = o.page
            });

            Get["/tagged/{Tag}"] = parameters =>
                                   ReturnArticlesTaggedBy(new TaggedBlogPostsBindingModel()
            {
                Tag = parameters.tag
            });

            Get["/{year}/{month}/{day}/{titleslug}"] = parameters =>
            {
                if (Request.Url.Path.EndsWith("/"))
                {
                    return(new RedirectResponse(Request.Url.Path.TrimEnd('/'), RedirectResponse.RedirectType.Permanent));
                }

                return(ReturnArticle(new BlogPostDetailsBindingModel {
                    Permalink =
                        parameters
                        .titleslug
                }));
            };

            Get["/{year}/{month}/{day?}"] = parameters =>
            {
                var day   = parameters["day"] == null ? null : (int?)parameters.day;
                var input = new IntervalBlogPostsBindingModel
                {
                    FromDate = new DateTime(parameters.year,
                                            parameters.month,
                                            parameters.day ?? 1)
                };

                input.ToDate = day.HasValue
                                                                                               ? input.FromDate.AddDays(1)
                                                                                               : input.FromDate.AddMonths(1);

                return(ReturnArticles(input));
            };
        }
Ejemplo n.º 3
0
        public HomeModule(IViewProjectionFactory viewFactory, ISpamShieldService spamShield, ICommandInvokerFactory commandInvokerFactory)
            : base(viewFactory)
        {
            _viewFactory           = viewFactory;
            _commandInvokerFactory = commandInvokerFactory;

            Get["/"] = p =>
                       ReturnHomeAction(new RecentBlogPostsBindingModel()
            {
                Page = 1, Take = 10
            });

            Get["/page/{page:int}"] = p =>
                                      ReturnHomeAction(new RecentBlogPostsBindingModel()
            {
                Page = p.page, Take = 10
            });

            Get["/tag/{Tag}"] = p =>
                                ReturnArticlesTaggedBy(new TaggedBlogPostsBindingModel()
            {
                Tag = p.tag
            });

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])/(?<titleslug>[a-zA-Z0-9_-]+)"] = p =>
                                                                                           ReturnArticle(new BlogPostDetailsBindingModel {
                Permalink = p.titleslug
            }, spamShield);                                                                            //TODO:需要增加对日期有效性的验证

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])"] = p =>
            {
                var input = new IntervalBlogPostsBindingModel
                {
                    FromDate = new DateTime(p.year, p.month, 1)
                };

                input.ToDate = input.FromDate.AddMonths(1);

                return(ReturnArticles(input));
            };

            Post["/spam/hash/{tick}"] = p => spamShield.GenerateHash(p.tick);

            Post["/comment/(?<titleslug>[a-zA-Z0-9_-]+)"] = p => ReturnAddComment(p);
        }
Ejemplo n.º 4
0
        public Negotiator ReturnArticles(IntervalBlogPostsBindingModel input)
        {
            var model = _viewFactory.Get <IntervalBlogPostsBindingModel, IntervalBlogPostsViewModel>(input);

            return(View["Archive", model]);
        }
Ejemplo n.º 5
0
        public Negotiator ReturnArticles(IntervalBlogPostsBindingModel input)
        {
            var model = _viewFactory.Get<IntervalBlogPostsBindingModel, IntervalBlogPostsViewModel>(input);

            return View["Archive", model];
        }