📄 xmlrpcresponse.cs
字号:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Web;
using System.Xml;
namespace BlogEngine.Core.API.MetaWeblog
{
/// <summary>
/// Object is the outgoing XML-RPC response. This objects properties are set
/// and the Response method is called sending the response via the HttpContext Response.
/// </summary>
public class XMLRPCResponse
{
#region Contructors
/// <summary>
/// Constructor sets default value
/// </summary>
/// <param name="methodName">MethodName of called XML-RPC method</param>
public XMLRPCResponse(string methodName)
{
_methodName = methodName;
_blogs = new List<MWABlogInfo>();
_categories = new List<MWACategory>();
_posts = new List<MWAPost>();
}
#endregion
#region Local Vars
private string _methodName;
private List<MWABlogInfo> _blogs;
private List<MWACategory> _categories;
private bool _completed;
private MWAFault _fault;
private MWAMediaInfo _mediaInfo;
private MWAPost _post;
private string _postID;
private List<MWAPost> _posts;
#endregion
#region Public Properties
/// <summary>
/// Name of Called Metaweblog Function
/// </summary>
public string MethodName
{
// Read Only
get { return _methodName; }
}
/// <summary>
/// List of blog structs. Used by blogger.getUsersBlogs.
/// </summary>
public List<MWABlogInfo> Blogs
{
get { return _blogs; }
set { _blogs = value; }
}
/// <summary>
/// List of category structs. Used by metaWeblog.getCategories.
/// </summary>
public List<MWACategory> Categories
{
get { return _categories; }
set { _categories = value; }
}
/// <summary>
/// Marks whether function call was completed and successful.
/// Used by metaWeblog.editPost and blogger.deletePost.
/// </summary>
public bool Completed
{
get { return _completed; }
set { _completed = value; }
}
/// <summary>
/// Fault Struct. Used by API to return error information
/// </summary>
public MWAFault Fault
{
get { return _fault; }
set { _fault = value; }
}
/// <summary>
/// MediaInfo Struct
/// </summary>
public MWAMediaInfo MediaInfo
{
get { return _mediaInfo; }
set { _mediaInfo = value; }
}
/// <summary>
/// Metaweblog Post Struct. Used by metaWeblog.getPost
/// </summary>
public MWAPost Post
{
get { return _post; }
set { _post = value; }
}
/// <summary>
/// Id of post that was just added. Used by metaWeblog.newPost
/// </summary>
public string PostID
{
get { return _postID; }
set { _postID = value; }
}
/// <summary>
/// List of Metaweblog Post Structs. Used by metaWeblog.getRecentPosts
/// </summary>
public List<MWAPost> Posts
{
get { return _posts; }
set { _posts = value; }
}
#endregion
#region Public Methods
/// <summary>
/// Response generates the XML-RPC response and returns it to the caller.
/// </summary>
/// <param name="context">httpContext.Response.OutputStream is used from the context</param>
public void Response(HttpContext context)
{
context.Response.ContentType = "text/xml";
using (XmlTextWriter data = new XmlTextWriter(context.Response.OutputStream, System.Text.Encoding.UTF8))
{
data.Formatting = Formatting.Indented;
data.WriteStartDocument();
data.WriteStartElement("methodResponse");
if (_methodName == "fault")
data.WriteStartElement("fault");
else
data.WriteStartElement("params");
switch (_methodName)
{
case "metaWeblog.newPost":
WriteNewPost(data);
break;
case "metaWeblog.editPost":
WriteBool(data);
break;
case "metaWeblog.getPost":
WritePost(data);
break;
case "metaWeblog.newMediaObject":
WriteMediaInfo(data);
break;
case "metaWeblog.getCategories":
WriteGetCategories(data);
break;
case "metaWeblog.getRecentPosts":
WritePosts(data);
break;
case "blogger.getUsersBlogs":
case "metaWeblog.getUsersBlogs":
WriteGetUsersBlogs(data);
break;
case "blogger.deletePost":
WriteBool(data);
break;
case "blogger.getUserInfo":
//TODO: Implement getUserInfo
// This should not occur as it has not been implemented in the handler.
break;
case "fault":
WriteFault(data);
break;
}
data.WriteEndElement();
data.WriteEndElement();
data.WriteEndDocument();
}
}
#endregion
#region Private Methods
/// <summary>
/// Writes Fault Parameters of Response.
/// </summary>
/// <param name="data">xml response</param>
private void WriteFault(XmlTextWriter data)
{
data.WriteStartElement("value");
data.WriteStartElement("struct");
// faultCode
data.WriteStartElement("member");
data.WriteElementString("name", "faultCode");
data.WriteElementString("value", _fault.faultCode);
data.WriteEndElement();
// faultString
data.WriteStartElement("member");
data.WriteElementString("name", "faultString");
data.WriteElementString("value", _fault.faultString);
data.WriteEndElement();
data.WriteEndElement();
data.WriteEndElement();
}
/// <summary>
/// Writes Boolean parameter of Response
/// </summary>
/// <param name="data">xml response</param>
private void WriteBool(XmlTextWriter data)
{
string postValue = "0";
if (_completed)
postValue = "1";
data.WriteStartElement("param");
data.WriteStartElement("value");
data.WriteElementString("boolean", postValue);
data.WriteEndElement();
data.WriteEndElement();
}
/// <summary>
/// Writes the Array of Category structs parameters of Response
/// </summary>
/// <param name="data">xml response</param>
private void WriteGetCategories(XmlTextWriter data)
{
data.WriteStartElement("param");
data.WriteStartElement("value");
data.WriteStartElement("array");
data.WriteStartElement("data");
foreach (MWACategory category in _categories)
{
data.WriteStartElement("value");
data.WriteStartElement("struct");
// description
data.WriteStartElement("member");
data.WriteElementString("name", "description");
data.WriteElementString("value", category.description);
data.WriteEndElement();
// categoryid
data.WriteStartElement("member");
data.WriteElementString("name", "categoryid");
data.WriteElementString("value", category.id);
data.WriteEndElement();
// title
data.WriteStartElement("member");
data.WriteElementString("name", "title");
data.WriteElementString("value", category.title);
data.WriteEndElement();
// htmlUrl
data.WriteStartElement("member");
data.WriteElementString("name", "htmlUrl");
data.WriteElementString("value", category.htmlUrl);
data.WriteEndElement();
// rssUrl
data.WriteStartElement("member");
data.WriteElementString("name", "rssUrl");
data.WriteElementString("value", category.rssUrl);
data.WriteEndElement();
data.WriteEndElement();
data.WriteEndElement();
}
// Close tags
data.WriteEndElement();
data.WriteEndElement();
data.WriteEndElement();
data.WriteEndElement();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -