快速业务通道

BlogEngine.Net架构与源代码分析系列part6:开放API

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
e.net/clickonce/blogimporter/blog.importer.application发一个请求,后面跟上相关参数信息,这是一个使用clickonce部署的客户端应用程序,打开以后可以看到:

BlogEngine.Net架构与源代码分析系列part6:开放API

使用它我们可以完成将其它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 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号