HttpServer.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Microsoft.AspNetCore.Http.Extensions;
  2. using NetBootServerCore.Components.UI.Cui;
  3. using NetBootServerCore.Components.UI.Cui.Logging;
  4. using System.Collections.Immutable;
  5. namespace NetBootServerCore.Components.UI.Http
  6. {
  7. public class HttpServer : NbsComponentBase
  8. {
  9. private readonly LiveConsole _liveConsole;
  10. private readonly IReadOnlyCollection<IHttpRequestProcessor> _processors;
  11. public HttpServer(LiveConsole liveConsole, IEnumerable<IHttpRequestProcessor> processors) : base(liveConsole.CreateLogger("HTTP"))
  12. {
  13. _liveConsole = liveConsole;
  14. _processors = processors.ToImmutableArray();
  15. }
  16. protected override void OnStart()
  17. {
  18. var builder = WebApplication.CreateBuilder();
  19. var app = builder.Build();
  20. app.Run(async context =>
  21. {
  22. context.Response.Headers.Server = nameof(NetBootServerCore);
  23. if (_processors.Any(processor => processor.ProcessRequest(context))) return;
  24. context.Response.StatusCode = 404;
  25. Logger.LogWarn($"404 {context.Request.GetEncodedPathAndQuery()}");
  26. });
  27. app.RunAsync();
  28. }
  29. }
  30. }