FortuneView.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Text;
  5. using BeetleX.Buffers;
  6. using BeetleX.FastHttpApi;
  7. namespace Benchmarks
  8. {
  9. public class FortuneView:BeetleX.FastHttpApi.ResultBase
  10. {
  11. private readonly static AsciiString _fortunesTableStart = "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
  12. private readonly static AsciiString _fortunesRowStart = "<tr><td>";
  13. private readonly static AsciiString _fortunesColumn = "</td><td>";
  14. private readonly static AsciiString _fortunesRowEnd = "</td></tr>";
  15. private readonly static AsciiString _fortunesTableEnd = "</table></body></html>";
  16. private static HeaderItem HTML_UTF8 = new HeaderItem("Content-Type: text/html; charset=UTF-8\r\n");
  17. public FortuneView(IEnumerable<Fortune> model)
  18. {
  19. Model = model;
  20. }
  21. public override bool HasBody => true;
  22. public IEnumerable<Fortune> Model { get; set; }
  23. public override IHeaderItem ContentType => HTML_UTF8;
  24. public override void Write(PipeStream stream, HttpResponse response)
  25. {
  26. stream.Write(_fortunesTableStart.Data, 0, _fortunesTableStart.Length);
  27. foreach (var item in Model)
  28. {
  29. stream.Write(_fortunesRowStart.Data, 0, _fortunesRowStart.Length);
  30. stream.Write(item.Id.ToString(CultureInfo.InvariantCulture));
  31. stream.Write(_fortunesColumn.Data, 0, _fortunesColumn.Length);
  32. stream.Write(System.Web.HttpUtility.HtmlEncode(item.Message));
  33. stream.Write(_fortunesRowEnd.Data, 0, _fortunesRowEnd.Length);
  34. }
  35. stream.Write(_fortunesTableEnd.Data, 0, _fortunesTableEnd.Length);
  36. }
  37. }
  38. }