Advertisement
Danny_Berova

HttpHandler

May 25th, 2018
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.69 KB | None | 0 0
  1. using System;
  2.  
  3. namespace MyWebServer.Server.Handlers
  4. {
  5.     using Common;
  6.     using Contracts;
  7.     using Http.Contracts;
  8.     using Http.Response;
  9.     using Routing.Contracts;
  10.     using System.Text.RegularExpressions;
  11.  
  12.     public class HttpHandler : IRequestHandler
  13.     {
  14.         private readonly IServerRouteConfig serverRouteConfig;
  15.  
  16.         public HttpHandler(IServerRouteConfig routeConfig)
  17.         {
  18.             CoreValidator.ThrowIfNull(routeConfig, nameof(routeConfig));
  19.  
  20.             this.serverRouteConfig = routeConfig;
  21.         }
  22.  
  23.         public IHttpResponse Handle(IHttpContext context)
  24.         {
  25.             var requestMethod = context.Request.RequestMethod;
  26.             var requestPath = context.Request.Path;
  27.             var registeredRoutes = this.serverRouteConfig.Routes[requestMethod];
  28.  
  29.             foreach (var registeredRoute in registeredRoutes)
  30.             {
  31.                 var routePattern = registeredRoute.Key.Trim();
  32.                 var routingContext = registeredRoute.Value;
  33.  
  34.                 var routeRegex = new Regex(routePattern);
  35.                 var match = routeRegex.Match(requestPath);
  36.  
  37.                 if (!match.Success)
  38.                 {
  39.                     continue;
  40.                 }
  41.  
  42.                 var parameters = routingContext.Parameters;
  43.  
  44.                 foreach (var parameter in parameters)
  45.                 {
  46.                     var parameterValue = match.Groups[parameter].Value;
  47.                     context.Request.AddUrlParameter(parameter, parameterValue);
  48.                 }
  49.  
  50.                 return routingContext.RequestHandler.Handle(context);
  51.             }
  52.  
  53.             return new NotFoundResponse();
  54.         }
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement