Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace MyWebServer.Server.Handlers
- {
- using Common;
- using Contracts;
- using Http.Contracts;
- using Http.Response;
- using Routing.Contracts;
- using System.Text.RegularExpressions;
- public class HttpHandler : IRequestHandler
- {
- private readonly IServerRouteConfig serverRouteConfig;
- public HttpHandler(IServerRouteConfig routeConfig)
- {
- CoreValidator.ThrowIfNull(routeConfig, nameof(routeConfig));
- this.serverRouteConfig = routeConfig;
- }
- public IHttpResponse Handle(IHttpContext context)
- {
- var requestMethod = context.Request.RequestMethod;
- var requestPath = context.Request.Path;
- var registeredRoutes = this.serverRouteConfig.Routes[requestMethod];
- foreach (var registeredRoute in registeredRoutes)
- {
- var routePattern = registeredRoute.Key.Trim();
- var routingContext = registeredRoute.Value;
- var routeRegex = new Regex(routePattern);
- var match = routeRegex.Match(requestPath);
- if (!match.Success)
- {
- continue;
- }
- var parameters = routingContext.Parameters;
- foreach (var parameter in parameters)
- {
- var parameterValue = match.Groups[parameter].Value;
- context.Request.AddUrlParameter(parameter, parameterValue);
- }
- return routingContext.RequestHandler.Handle(context);
- }
- return new NotFoundResponse();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement