示例#1
0
        private void write(RssWriter writer)
        {
            try
            {
                if (channels.Count == 0)
                    throw new InvalidOperationException("Feed must contain at least one channel.");

                writer.Version = rssVersion;

                writer.Modules = modules;

                foreach (RssChannel channel in channels)
                {
                    if (channel.Items.Count == 0)
                        throw new InvalidOperationException("Channel must contain at least one item.");

                    writer.Write(channel);
                }
            }
            finally
            {
                if (writer != null)
                    writer.Close();
            }
        }
        public ActionResult Rss()
        {
            var blog = Blog.GetBlogByName(CurrentWeb);
            if (blog == null)
            {
                throw new HttpException(404, Messages.BlogNotExist);
            }

            int total;
            var posts = Post.GetPostsOfBlog(blog.Id, 1, blog.PostsPerFeed, out total);
            var baseUri = MyLifeContext.AbsoluteWebRoot;
            Response.ContentType = "text/xml";
            var rssWriter = new RssWriter(Response.OutputStream, Encoding.UTF8) {Version = RssVersion.RSS20};
            var rssChanel = new RssChannel
                                {
                                    Title = blog.Name,
                                    Description = blog.Description,
                                    Link = new Uri(baseUri, blog.CreatedBy + "/blog"),
                                    LastBuildDate = DateTime.UtcNow
                                };

            foreach (var post in posts)
            {
                rssChanel.Items.Add(new RssItem
                                        {
                                            Title = post.Title,
                                            Description = post.Content,
                                            Link = new Uri(baseUri, post.RelativeUrl),
                                            Author = post.CreatedBy,
                                            PubDate = post.CreatedDate
                                        });
            }

            rssWriter.Write(rssChanel);
            rssWriter.Close();
            Response.Flush();
            return new EmptyResult();
        }
示例#3
0
 /// <summary>Writes the RSS feed to the specified file.</summary>
 /// <remarks>The encoding is ISO-8859-1.</remarks>
 /// <exception cref="ArgumentException">The filename is empty, contains only white space, or contains one or more invalid characters.</exception>
 /// <exception cref="UnauthorizedAccessException">Access is denied.</exception>
 /// <exception cref="ArgumentNullException">The filename is a (null c#, Nothing vb) reference.</exception>
 /// <exception cref="DirectoryNotFoundException">The directory to write to is not found.</exception>
 /// <exception cref="IOException">The filename includes an incorrect or invalid syntax for file name, directory name, or volume label syntax.</exception>
 /// <exception cref="System.Security.SecurityException">The caller does not have the required permission.</exception>
 /// <param name="fileName">specified file (including path) If the file exists, it will be truncated with the new content.</param>
 /// <exception cref="InvalidOperationException">Feed must contain at least one channel.</exception>
 /// <exception cref="InvalidOperationException">Channel must contain at least one item.</exception>
 public void Write(string fileName)
 {
     var writer = new RssWriter(fileName);
     write(writer);
 }