ASP.NETでTrackback受信

.NETで開発されている.TEXTとかのTrackback URLってどうやって処理されてんの?とか思って調べてたら、HttpHandlerを使っている模様。ということで、HttpHanderをWeb.Configに追加して、Trackbackを受信するハンドラを実装。

using System;
using System.Web;
using System.Xml;
/// <summary>
/// TrackbackHandler の概要の説明です。
/// </summary>
public class TrackbackHandler : IHttpHandler {
public TrackbackHandler() {
}
public void ProcessRequest(HttpContext context) {
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
string ipaddr = Request.UserHostAddress;
string title = Request.Params["title"].ToString();
string source_url = Request.Params["url"].ToString();
string excerpt = Request.Params["excerpt"].ToString();
string blog_name = Request.Params["blog_name"].ToString();
// 応答
trackbackResponse(context, 0, "OK");
}
public bool IsReusable {
get { return false; }
}
private void trackbackResponse(HttpContext context, int errNum, string errText) {
XmlDocument d = new XmlDocument() ;
XmlElement root = d.CreateElement("response") ;
d.AppendChild(root) ;
XmlElement er = d.CreateElement("error") ;
root.AppendChild(er) ;
er.AppendChild(d.CreateTextNode(errNum.ToString())) ;
if ( errText != "" ) {
XmlElement msg = d.CreateElement("message") ;
root.AppendChild(msg) ;
msg.AppendChild(d.CreateTextNode(errText)) ;
}
d.Save ( context.Response.Output ) ;
context.Response.End() ;
}
}

Web.Configのほうは、こんな記述を追加。TrackbackHanderのネームスペースがSample.Seriviceの場合。


<httpHandlers>
<add verb="*" path="trackback/*" type="Sample.Service.TrackbackHandler, Sample" />
</httpHandlers>

仮想ディレクトリとして/webapp/trackbackを作っておけば、
http://server/webapp/trackback/123.ping
http://server/webapp/trackback/123.aspx
こんなTrackback URLにリクエストがくると、TrackbackHandlerでリクエストの処理ができる。(登録されていない拡張子はIISで設定が必要)
/webapp/trackbackのディレクトリ配下には実体は必要ない。

コメント

タイトルとURLをコピーしました