毫无疑问MetaWeblog API是一个非常有益和受欢迎的发明,只为博客和其他网站的一些一般服务。

概念

metaweblog是基于XML的RPC通信( 下载 )。这意味着你有一组预先定义的结构(简单的数据类型属性 )表示,正转客户端和服务器之间。

您需要使用MetaWeblog API 的以下六个结构:

  • BlogInfo: 有关博客的网址, ID或名称。
  • UserInfo: 博客用户的ID ,名字,姓氏或电子邮件。
  • Post: 就是博客帖子,标题,正文和类别。
  • CategoryInfo: 博客类别信息,编号和名称。
  • MediaObject: 有关媒体对象(图像,音频和其他文件类型)的名称,类型和数据。
  • MediaObjectInfo: 媒体对象。

作为一般规则,您可以请记住, metaweblog API使用字符串类型为基本类型,参数和返回类型和不存在任何整数类型。 在几个地方也用到了布尔和Base64编码的字符串两个类型。

MetaWeblog API有九个方法:

  • metaWeblog.newPost: 增加一个新帖子
  • metaWeblog.editPost: 更新帖子。
  • metaWeblog.getCategories: 获得博客的类别。
  • metaWeblog.getPost: 得到一个单一的POST数据。
  • metaWeblog.getRecentPosts: 得到的最近的帖子。
  • metaWeblog.newMediaObject: 增加一个新的媒体对象。
  • blogger.deletePost: 删除一个帖子。
  • blogger.getUserInfo: 获得用户信息。
  • blogger.getUsersBlogs: 得到用户的blog清单。

如何创建metaweblog

1.首先下载XML-RPC.NET,  然后添加引用到项目中。。

2.创建一个 HTTP Handler 或者 WebService。这里创建的是HTTP处理程序MetaWeblogAPI.ashx。并设置入口点-  Class="MetaWeblogSample.MetaWeblog"。

<%@ WebHandler Language="C#" CodeBehind="MetaWeblogAPI.ashx.cs" Class="MetaWeblogSample.MetaWeblog" %>
 

3.创建结构Structures( Structs.cs ),至于如何正确创建此结构,请看 MetaWeblog API 规范。 

下面的代码是我创建的结构。 你也可以在你的项目中使用相同的代码, 因为这些结构是固定不变的。

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CookComputing.XmlRpc;
namespace MetaWeblogSample
{
#region Structs
public struct BlogInfo
{
public string blogid;
public string url;
public string blogName;
}
public struct Category
{
public string categoryId;
public string categoryName;
}
[Serializable]
public struct CategoryInfo
{
public string description;
public string htmlUrl;
public string rssUrl;
public string title;
public string categoryid;
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
public struct Enclosure
{
public int length;
public string type;
public string url;
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
public struct Post
{
public DateTime dateCreated;
public string description;
public string title;
public string[] categories;
public string permalink;
public object postid;
public string userid;
public string wp_slug;
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
public struct Source
{
public string name;
public string url;
}
public struct UserInfo
{
public string userid;
public string firstname;
public string lastname;
public string nickname;
public string email;
public string url;
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
public struct MediaObject
{
public string name;
public string type;
public byte[] bits;
}
[Serializable]
public struct MediaObjectInfo
{
public string url;
}
#endregion
}
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CookComputing.XmlRpc;
namespace MetaWeblogSample
{
public interface IMetaWeblog
{
#region MetaWeblog API
[XmlRpcMethod("metaWeblog.newPost")]
string AddPost(string blogid, string username, string password, Post post, bool publish);
[XmlRpcMethod("metaWeblog.editPost")]
bool UpdatePost(string postid, string username, string password, Post post, bool publish);
[XmlRpcMethod("metaWeblog.getPost")]
Post GetPost(string postid, string username, string password);
[XmlRpcMethod("metaWeblog.getCategories")]
CategoryInfo[] GetCategories(string blogid, string username, string password);
[XmlRpcMethod("metaWeblog.getRecentPosts")]
Post[] GetRecentPosts(string blogid, string username, string password, int numberOfPosts);
[XmlRpcMethod("metaWeblog.newMediaObject")]
MediaObjectInfo NewMediaObject(string blogid, string username, string password,
MediaObject mediaObject);
#endregion
#region Blogger API
[XmlRpcMethod("blogger.deletePost")]
[return: XmlRpcReturnValue(Description = "Returns true.")]
bool DeletePost(string key, string postid, string username, string password, bool publish);
[XmlRpcMethod("blogger.getUsersBlogs")]
BlogInfo[] GetUsersBlogs(string key, string username, string password);
[XmlRpcMethod("blogger.getUserInfo")]
UserInfo GetUserInfo(string key, string username, string password);
#endregion
}
}
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CookComputing.XmlRpc;
using System.Collections.Generic;
///
///  注释说明来自网络。。
///
namespace MetaWeblogSample
{
public class MetaWeblog : XmlRpcService, IMetaWeblog
{
#region Public Constructors
public MetaWeblog()
{
}
#endregion
#region IMetaWeblog Members
string IMetaWeblog.AddPost(string blogid, string username, string password,
Post post, bool publish)
{
if (ValidateUser(username, password))
{
string id = string.Empty;
// TODO: 请根据实际情况返回一个字符串,一般是Blog的ID。
return id;
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
bool IMetaWeblog.UpdatePost(string postid, string username, string password,
Post post, bool publish)
{
if (ValidateUser(username, password))
{
bool result = false;
// TODO: 请根据实际情况返回一个布尔值,表示是否更新成功。
return result;
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
Post IMetaWeblog.GetPost(string postid, string username, string password)
{
if (ValidateUser(username, password))
{
Post post = new Post();
// TODO: 请根据实际情况返回一个Struct { Struct是一个规范格式,
//       格式就是Post的属性,注意category是一个数组,是这个Post所属的类别。
//       如果类别不存在,服务器端将只处理存在的类别}。
return post;
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
CategoryInfo[] IMetaWeblog.GetCategories(string blogid, string username, string password)
{
if (ValidateUser(username, password))
{
List<CategoryInfo> categoryInfos = new List<CategoryInfo>();
// TODO: 请根据实际情况获取Blog的类别,并设置CategoryInfo。
return categoryInfos.ToArray();
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
Post[] IMetaWeblog.GetRecentPosts(string blogid, string username, string password,
int numberOfPosts)
{
if (ValidateUser(username, password))
{
List<Post> posts = new List<Post>();
// TODO: 返回一个结构(struct)的数组(array)。
//       每一个Struct包含getPost返回值一样的结构。请设置后返回。
return posts.ToArray();
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
MediaObjectInfo IMetaWeblog.NewMediaObject(string blogid, string username, string password,
MediaObject mediaObject)
{
if (ValidateUser(username, password))
{
MediaObjectInfo objectInfo = new MediaObjectInfo();
// TODO: 返回一个数组
//       其中blogid、username、password分别代表Blog的id(注释:如果你有两个Blog,blogid指定你需要编辑的blog)、用户名和密码。
//       struct必须包含name, type 和bits三个元素,当然也可以包含其他元素。
return objectInfo;
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
bool IMetaWeblog.DeletePost(string key, string postid, string username, string password, bool publish)
{
if (ValidateUser(username, password))
{
bool result = false;
// TODO:  请根据实际情况返回一个布尔值,表示是否删除成功。
return result;
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
BlogInfo[] IMetaWeblog.GetUsersBlogs(string key, string username, string password)
{
if (ValidateUser(username, password))
{
List<BlogInfo> infoList = new List<BlogInfo>();
// TODO: 请根据实际情况获取 当前用户 Blog 信息,并设置用户 Blog 信息。
return infoList.ToArray();
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
UserInfo IMetaWeblog.GetUserInfo(string key, string username, string password)
{
if (ValidateUser(username, password))
{
UserInfo info = new UserInfo();
// TODO: 请根据实际情况获取 当前用户 信息,并设置用户 信息。
return info;
}
throw new XmlRpcFaultException(0, "User is not valid!");
}
#endregion
#region Private Methods
private bool ValidateUser(string username, string password)
{
bool result = false;
// TODO: Implement the logic to validate the user
return result;
}
#endregion
}
}
 

6.编译通过了,测试下: http://localhost:1269/MetaWeblogAPI.ashx

测试是通过了,具体如何怎么用在博客上我也没做出来,还得研究。值得提醒的是 通过 http://www.xmlrpc.com 下载 的 xml-rpc.net 包包已经包含各个结构,接口和方法的代码,请自行研究。

下载[ 62KB ]

转载于:https://www.cnblogs.com/domainblogs/archive/2009/03/01/1400802.html

Asp.Net 创建MetaWeblog API相关推荐

  1. 使用Entity Framework Core,Swagger和Postman创建ASP.NET Core Web API的分步指南

    目录 介绍 背景 第1步:创建一个新项目 第2步:添加模型类 第3步:使用Entity Framework Core 第4步:添加数据库上下文和控制器 步骤5:在Package Manager控制台中 ...

  2. 在ASP.NET Core 2.0中创建Web API

    目录 介绍 先决条件 软件 技能 使用代码 第01步 - 创建项目 第02步 - 安装Nuget包 步骤03 - 添加模型 步骤04 - 添加控制器 步骤05 - 设置依赖注入 步骤06 - 运行We ...

  3. ASP.NET创建一个web程序Vs创建一个Web API项目

    ASP.NET创建一个web程序 首先windows+r调出控制台,按照下面的命令创建WebApp应用: dotnet new webapp -o MyWebApp --no-https -f net ...

  4. 如何测试ASP.NET Core Web API

    在本文中,我们将研究如何测试你的ASP .NET Core 2.0 Web API解决方案.我们将了解使用单元测试进行内部测试,使用全新的ASP .NET Core的集成测试框架来进行外部测试. 本文 ...

  5. 元数据驱动设计 —— 为动态移动应用创建Web API

    时间回到多年之前(当时我的头发还没这么稀疏),Google在4月1日这一天发布了Gmail,这不由得令许多人怀疑这个产品是否只是Google精心炮制的一个玩笑.但谁又能够去指责他们的怀疑呢?毕竟整个互 ...

  6. 针对ASP.NET Core Web API的先进架构

    \ 本点要点 \\ 与传统的ASP.NET相比,ASP.NET Core的新架构提供了一些好处\\t ASP.NET Core从一开始就包含对依赖注入的支持\\t 单一职责原则简化了实施和设计.\\t ...

  7. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线...

    重温.NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现 ...

  8. 支持多个版本的ASP.NET Core Web API

    基本配置及说明 版本控制有助于及时推出功能,而不会破坏现有系统. 它还可以帮助为选定的客户提供额外的功能. API版本可以通过不同的方式完成,例如在URL中添加版本或通过自定义标头和通过Accept- ...

  9. ASP.NET Core Web API 与 SSL

    SSL 一直没有真正研究过SSL,不知道下面的理解是否正确. SSL是Secure Sockets Layer的缩写,它用来保护服务器和客户端之前的通信.它是基于信任+加密的概念. 在介绍SSL的原理 ...

最新文章

  1. java程序员封闭_变态级JAVA程序员面试32问(转)
  2. UbuntuでPostgreSQLをインストールからリモートアクセスまでの手順
  3. explode 无分隔符_使用PHP explode()函数时出现“空分隔符”警告
  4. android listview item长按事件,ListView的点击事件,长按事件,数据刷新
  5. 线程同步机制有临界区、互斥、信号量优缺点
  6. kafka整理笔记笔记
  7. spring jpa 流式_从响应式Spring Data存储库流式传输实时更新
  8. Mysql存储函数实现增删改查_使用存储过程操作数据库(实现增删改查)
  9. c++已知2点求中垂线_高中化学基于元素周期表的推断题知识总结!(2)
  10. python打包exe
  11. 从零开始写一个Exporter
  12. MySQL数据库(三)
  13. lisp代码合并_CAD 同名文件合并(不开图)
  14. linux运行Windows模拟器,Wine(Windows模拟器)
  15. 电脑重启bootmgr_解决电脑出现bootmgr is missing如何解决
  16. C# 公历日期时间转农历日期方法 注解解读
  17. Linux FTP服务器虚拟用户登录
  18. 从零开始玩转Franka Panda机器人
  19. 第七章 如何增加收入
  20. 微信个人好友增加到10000人啦!

热门文章

  1. poj1861 最小生成树 prim amp; kruskal
  2. Linux系统安装gcc/g++详细过程
  3. 老李秘技:loadrunner11是否还支持dblib协议?
  4. linux find 反转 查找没有被找到的结果
  5. Lingo 0-1规划
  6. 自定义Dialog(一)
  7. 在main()之前,IAR都做了啥?
  8. LaTeX入门第一集!LaTeX下载资源分享!LaTeX教学资源分享!TeXstudio下载资源分享!
  9. python json dumps 自定义_Python json.dumps 自定义序列化操作
  10. 对‘pthread_create’未定义的引用_【学习贴士】引用文献不积极,APA Guideline 帮助你...