mediatypes in exyus metadata
i was able to complete the work to move all media-types definitions for exyus resource classes into a custom attribute instead of an instance collection. i also completed the code that collects media-type data for each UriPattern
and stores that in memory for access throughout the run of the app. technically, i need to create a backup for the memory (a temporary disk file), but i can do that later this week.
now, defining a resource for exyus includes defining the UriPattern
and the MediaTypes
attributes along with the details of the resource including the content (string, static file, xml/xsl transform pair. database data, etc.), and the caching rules. here's an example that returns a simple string using an optional query string argument (?name=fred
):
[UriPattern(@"/hello/(?<tail>\.xcs)(.*)?"")] public class StartPage : GetHandler { public StartPage() { this.Content = "<h1>hello $name$</h1>"; } }
here's a more interesting example that returns the date/time and supports three different media types:
[UriPattern(@"/time/(?<tail>\.xcs)(.*)?")] [MediaTypes("text/html","text/xml","text/plain")] public class timeResource : GetHandler { string xml_out = "<root><date-time>{0:yyyy-MM-ddThh:mm:ss}</date-time></root>"; string html_out = "<div><span class=\"date-time\">{0:yyyy-MM-ddThh:mm:ss}</span></div>"; string plain_out = "{0:yyyy-MM-ddThh:mm:ss}"; public timeResource() { this.ContentType = "text/html"; } public override void Get() { Utility util = new Utility(); string out_text = string.Empty; string mtype = util.GetMediaType(this); if (mtype != this.ContentType) { this.ContentType = mtype; this.Status.ContentType = mtype; } switch (mtype) { case "text/xml": out_text = string.Format(xml_out, DateTime.UtcNow); break; case "text/html": out_text = string.Format(html_out, DateTime.UtcNow); break; case "text/plain": out_text = string.Format(plain_out, DateTime.UtcNow); break; default: out_text = string.Empty; break; } this.Response = out_text; } }
there's lots of good stuff coming out soon. i'm getting excited again!