BlogEngine.Net架构与源代码分析系列part14:实现分析(下)2012-02-01 cnblogs GUO Xingwang网站页面上值得参考的部分BlogEngine.Net的成功不仅在于它的架构设计,它的代码实现细节也都是很经典的,每个结构分割的很清晰很自然,希望大家多多品位一下。在这篇文章里我将给大家介绍一下BlogEngine.Net的Web实现上的几个亮点,包括Web.config,Ajax的运用等。Web.config中的几个结点说明让我们看一下appSettings结点中的各个选项的含义,以便您对整个BlogEngine.Net的认识更加清晰。BlogEngine.FileExtension:在这里我们可以自定义Url请求的后缀名称,默认是.aspx。您可以定义自己喜欢的扩展名,例如.extguo,那么对于文章等生成的Url就成了类似http://HostName/CategoryName/PostTitle.extguo的形式。这个结点的使用在很多地方都可以见到,例如:Post类中的RelativeLink
1public string RelativeLink
 2{
 3get
 4{
 5string slug = Utils.RemoveIllegalCharacters(Slug) + BlogSettings.Instance.FileExtension;
 6
 7if (BlogSettings.Instance.TimeStampPostLinks)
 8return Utils.RelativeWebRoot + "post/" + DateCreated.ToString("yyyy/MM/dd/", CultureInfo.InvariantCulture) + slug;
 9
10return Utils.RelativeWebRoot + "post/" + slug;
11}
12}
BlogSettings.Instance.FileExtension就是读取这个结点获得的扩展名。BlogEngine.VirtualPath:主要是为一些文章等的链接而服务的。我们可以使用虚拟目录安装我们的BlogEngine.Net,那么我们只要设置一下这里就可以得到和直接在根目录下一样的效果。我们需要注意一下Utils关于Url处理的部分,其中:Utils中的RelativeWebRoot
1public static string RelativeWebRoot
 2{
 3get
 4{
 5if (_RelativeWebRoot == null)
 6_RelativeWebRoot = VirtualPathUtility.ToAbsolute(ConfigurationManager.AppSettings["BlogEngine.VirtualPath"]);
 7
 8return _RelativeWebRoot;
 9}
10}
就是获得相对Web目录。