Skip to content

Instantly share code, notes, and snippets.

@mikeobrien
Created April 20, 2012 17:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikeobrien/2430341 to your computer and use it in GitHub Desktop.
Save mikeobrien/2430341 to your computer and use it in GitHub Desktop.
Download data convention
public class DownloadDataModel
{
public string Data { get; set; }
public string Filename { get; set; }
public string MimeType { get; set; }
}
public class DownloadDataBehavior : BasicBehavior
{
private readonly IFubuRequest _request;
private readonly IOutputWriter _writer;
public DownloadDataBehavior(IOutputWriter writer, IFubuRequest request)
: base(PartialBehavior.Ignored)
{
_writer = writer;
_request = request;
}
protected override DoNext performInvoke()
{
var output = _request.Get<DownloadDataModel>();
_writer.Write(output.MimeType, output.Data);
_writer.AppendHeader("Content-Disposition", "attachment; filename=" + output.Filename + ";");
return DoNext.Continue;
}
}
public class DownloadDataConvention : ActionCallModification
{
public DownloadDataConvention()
: base(call => call.AddToEnd(new OutputNode(typeof (DownloadDataBehavior))), "Adding download data behavior as the output node")
{
Filters.Excludes.Add(call => call.HasAnyOutputBehavior());
Filters.Includes.Add(call => call.OutputType().CanBeCastTo<DownloadDataModel>());
}
}
public class FubuConventions : FubuRegistry
{
public FubuConventions()
{
...
ApplyConvention<DownloadDataConvention>();
...
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment