Skip to content

Instantly share code, notes, and snippets.

@rrreese
Created November 17, 2012 11:14
Show Gist options
  • Save rrreese/4095014 to your computer and use it in GitHub Desktop.
Save rrreese/4095014 to your computer and use it in GitHub Desktop.
Generate Error Response ASP.NET MVC
private static void generateErrorResponse(int number, string message, TextWriter textWriter)
{
string element = (number > 0) ? "error" : "message";
string elementValue = (number > 0) ? number.ToString() : message;
XElement xml = new XElement("response",
new XElement(element, elementValue));
writeXmlToStream(textWriter, xml);
}
private static void generateSuccessResponse(TextWriter textWriter,
string title,
Uri link,
string description,
string language)
{
XElement xml =
new XElement("response",
new XElement("error", "0"),
new XElement("rss",
new XAttribute("version", "0.91"),
new XElement("channel",
new XElement("title", title),
new XElement("link", link.AbsolutePath),
new XElement("description", description),
new XElement("language", language))));
writeXmlToStream(textWriter, xml);
}
routes.MapRoute
(
"Trackback",
"LinkBack/ProcessRequest/{trackBackController}/{trackBackAction}/{trackBackID}",
new
{
controller = "LinkBack",
action = "ProcessRequest",
trackBackController = "",
trackBackAction = "",
trackBackID = ""
}
);
<!--
<RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
xmlns="rdf">
<Description rdf:about="http://www.rrreese.com/Article/Show/ASP.NET MVC TrackBack Implementation"
dc:identifier="http://www.rrreese.com/Article/Show/ASP.NET MVC TrackBack Implementation"
dc:title="ASP.NET MVC TrackBack Implementation"
trackback:ping="http://www.rrreese.com/LinkBack/ProcessRequest/Artice/Show/ASP.NET MVC TrackBack Implementation" />
</RDF>
-->
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>1</error>
<message>The error message</message>
</response>
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ProcessRequest()
{
LinkBack linkBack = new LinkBack { ID = Guid.NewGuid(), CreationDate = DateTime.Now };
//Retreave routing information
string controler = Url.RequestContext.RouteData.Values["trackBackController"].ToString();
string action = Url.RequestContext.RouteData.Values["trackBackAction"].ToString();
string id = Url.RequestContext.RouteData.Values["trackBackID"].ToString();
HttpRequestBase request = Url.RequestContext.HttpContext.Request;
HttpResponseBase response = Url.RequestContext.HttpContext.Response;
response.Buffer = false;
response.Clear();
response.ContentType = "application/xml";
//Extract data from HTTP request
if (!string.IsNullOrEmpty(request["url"]))
{
linkBack.LinkingPostUrl = request["url"];
linkBack.Title = request["url"] + "@" + DateTime.Now.ToLongTimeString();
}
else
{
generateErrorResponse(1, "URL is missing", response.Output);
}
if (!string.IsNullOrEmpty(request["blog_name"]))
linkBack.LinkingSiteName = request["blog_name"];
if (!string.IsNullOrEmpty(request["title"]))
linkBack.LinkingPostTitle = request["title"];
if (!string.IsNullOrEmpty(request["excerpt"]))
linkBack.LinkingPostExcerpt = request["excerpt"];
linkBack.Save();
generateSuccessResponse(response.Output,
id,
new Uri("http://www.rrreese.com/" + controler + "/" + action + "/" + id),
"",
"en-US");
return new EmptyResult();
}
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>0</error>
</response>
private static void writeXmlToStream(TextWriter textWriter, XElement xml)
{
//Turn off Byte Order Mark (BOM)
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings { Encoding = new UTF8Encoding(false) };
using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, xmlWriterSettings))
{
xml.WriteTo(xmlWriter);
xmlWriter.Flush();
}
}
XNamespace rdf = "rdf";
XNamespace dc = "dc";
XNamespace trackback = "trackback";
XElement xml = new XElement(rdf + "RDF",
new XAttribute(XNamespace.Xmlns + "rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"),
new XAttribute(XNamespace.Xmlns + "dc", "http://purl.org/dc/elements/1.1/"),
new XAttribute(XNamespace.Xmlns + "trackback", "http://madskills.com/public/xml/rss/module/trackback/"),
new XElement(rdf + "Description",
new XAttribute(rdf + "about", "http://www.rrreese.com/Article/Show/" + article.Title),
new XAttribute(dc + "identifier", "http://www.rrreese.com/Article/Show/" + article.Title),
new XAttribute(dc + "title", article.Title),
new XAttribute(trackback + "ping", "http://www.rrreese.com/LinkBack/ProcessRequest/Artice/Show/" + article.Title)));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment