dotnetblogengine.net Post的url做得不错,可以自定义文件名。
如果没有自定义文件名,则会根据Post.Title来自动确定。
但Pages就不一样了,没有slug选项,这样就决定了Pages页面只能按照Title来决定其url.
其实稍加改动即可:
1、给Page.cs添加EntryName属性
/// <summary>
/// 自定义文件名
/// </summary>
public string EntryName
{
get;
set;
}
2、修改Admin/Pages/Pages.aspx文件,使编辑Pages文件时能添加EntryName属性
3、修改BlogEngine.Core/Providers/XmlProvider/Pages.cs
SelectPage(Guid id)方法中添加
...
if (doc.SelectSingleNode("page/entryname") != null)
page.EntryName = doc.SelectSingleNode("page/entryname").InnerText;
else
page.EntryName = Utils.RemoveIllegalCharacters(page.Title);
....
InsertPage(Page page)方法中添加
....
writer.WriteElementString("entryname", page.EntryName);
writer.WriteElementString("content", page.Content);
...
4、修改UrlRewrite.cs,找到RewritePage方法,修改如下
private static void RewritePage(HttpContext context)
{
string title = ExtractTitle(context);
foreach (Page page in Page.Pages)
{
if (title.Equals(page.EntryName, StringComparison.OrdinalIgnoreCase))
{
context.RewritePath(Utils.RelativeWebRoot + "page.aspx?id=" + page.Id + GetQueryString(context), false);
break;
}
}
}
大功告成!