Keith told me that
CSBlogs was returning relative urls for its Metablog API implementation. After I
installed it, I noticed the same thing - so I decided to hack it a little bit
and find out what was going wrong. It turns out that the software is just doing
what the guys at telligent are telling it to - thankfully I've got the code and
I can poke around when I find little issues like this :)
First, I added a call to the Globals class to return a formatted url with the
application path intact. This was in Components.SiteUrlsData.cs:
public virtual string FormatUrl(string name, params object[] parameters)
{
if(parameters == null)
return Globals.FullPath(this.Paths[name]);
else
return Globals.FullPath(string.Format(Paths[name],parameters));
}
But wait! This causes the rss feed to show up with something silly like http:
/ /localhost/cshttp://localhost/cs/blog... for the links in the RSS and Atom
feeds produced by CSBlogs. So, I tried it without the "HostPath" to see if I
could get the same results. This was in
Blogs.Components.BaseWeblogSyndicationHandler:
///
/// Appends http://Host:Port to all blog urls
///
protected override string BaseUrl
{
get
{
return ""; //return Globals.HostPath(Context.Request.Url);
}
}
That's it right? Nope, not if you have galleries enabled. One of the methods
(that I know of :) uses the modified FormatUrl above to try and get a MapPath to
a directory. You'll find out really quickly that MapPath doesn't like
fully-qualified urls passed to it...I know I did. So, I modified one more line
to make sure that I've got a relative path passed into the photo gallery. This
was in Galleries.Components.Picture:
///
/// This static method gets the location of the picture cache directory, mapped on the local filesystem.
///
/// string
public static string CacheDirectory()
{
Uri uri = new Uri(GalleryUrls.Instance().PictureCache);
return CSContext.Current.Context.Server.MapPath(uri.AbsolutePath);
}
After that, everything seems to be running as normal. I don't know if I'd
recommend doing something like this on your install, especially if things are
working well enough for you. I just use this particular feature of the Metablog
API quite often, so it bit me a lot.
update: It looks like the trackback feature uses fully
qualified urls as well as the rss/atom feeds. I'll post a fix tomorrow when I
find out where the BaseUrl is set for the trackbacks.
update2: Found it :) I would've got it done last
night, but I don't have the broadband yet. Any ways, like I thought it was just
a removal of a baseUrl parameter (case notwithstanding). I found this in
Blogs.Controls.TrackbackMarkup:
protected override void Render(HtmlTextWriter writer)
{
if(IsValid)
{
string baseUrl = Globals.HostPath(Context.Request.Url);
writer.WriteLine(tag,/*baseUrl+*/PermaLink,Title,/*baseUrl+*/PingUrl);
}
}
[ Currently Playing : Rooster - Alice in Chains - Unplugged
(6:40) ]