e.net/clickonce/blogimporter/blog.importer.application发一个请求,后面跟上相关参数信息,这是一个使用clickonce部署的客户端应用程序,打开以后可以看到:
使用它我们可以完成将其它Blog系统中的Blog文章导入到BlogEngine.Net中来,同样,这些文件的格式都是标准的XML文件。
在BlogEngine.Net的Web站点中我们可以看到一个api的目录,那里面有一些Blog导入所使用的WebService接口,这个客户端导入工具同样也是调用站点中的这些接口函数来完成导入的,注意
http://dotnetblogengine.net/clickonce/blogimporter/blog.importer.application
后面的参数url就是告诉导入工具WebService的所在站点地址,username就是导入的目标用户名。这个导入的WebService应该属于BlogEngine.Net自己定义的接口,并不是标准的接口,但是可以被标准调用(Soap),例如我们也可以自己写一个导入的程序调用这个接口来完成导入功能。
对于这个WebService的实现比较简单,我不想多说了,但是希望大家注意两点比较有特色的地方:
1.在部分接口中使用了SoapHeader来完成用户信息的验证。例如:
1[SoapHeader("AuthenticationHeader")]
2[WebMethod]
3public string AddPost(ImportPost import, string previousUrl, bool removeDuplicate) {
4 if (!IsAuthenticated()) // 进行用户验证
5 throw new InvalidOperationException("Wrong credentials");
6 if (removeDuplicate) {
7 if (!Post.IsTitleUnique(import.Title)) {
8 // Search for matching post (by date and title) and delete it
9 foreach (Post temp in Post.GetPostsByDate(import.PostDate.AddDays(-2),
10import.PostDate.AddDays(2))) {
11 if (temp.Title == import.Title) {
12 temp.Delete();
13 temp.Import();
14 }
15 }
16 }
17 }
18 Post post = new Post();
19 post.Title = import.Title;
20 post.Author = import.Author;
21 post.DateCreated = import.PostDate;
22 post.Content = import.Content;
23 post.Description = import.Description;
24 post.IsPublished = import.Publish;
25 //TODO: Save Previous Url?
26 AddCategories(import.Categories, post);
27 //TODO: Add Tag Support
28 post.Import();
29 return post.Id.ToString();
30}
2.对于一些被导入的Blog中的图片和文件等的存储和处理。例如下载文件和链接的加入:
1// 获得原文章中引用文件资源并存储在本地
2[SoapHeader("AuthenticationHeader")]
3[WebMethod]
4public bool GetFile(string source, string destination) {
5 bool response;
6 try {
7 string rootPath = BlogSettings.Instance.StorageLocation + "files/";
8 string serverPath = Server.MapPath(rootPath);
9 string saveFolder = serverPath;
10 string fileName = destination;
11
12 // Check/Create Folders & Fix fileName
13 if (fileName.LastIndexOf(''/'') > -1) {
14 saveFolder += fileName.Substring(0, fileName.LastIndexOf(''/''));
15 saveFolder = saveFolder.Replace(''/'', Path.DirectorySeparatorChar);
16
17 fileName = fileName.Substring(fileName.LastIndexOf(''/'') + 1);
18 } else {
19 if (saveFolder.EndsWith(Path.DirectorySeparatorChar.ToString()))
20
|