Example #1
0
        public IMediator AddRoute(string key, GatewayVerb verb, RouteInfo routeInfo)
        {
            var gatewayRouteInfo = new GatewayRouteInfo
            {
                Verb  = verb,
                Route = routeInfo,
            };

            paths.Add(key.ToLower() + verb.ToString(), gatewayRouteInfo);

            return(this);
        }
        public async Task Invoke(HttpContext context, IApiOrchestrator orchestrator, ILogger <ApiGatewayLog> logger)
        {
            ApiInfo          apiInfo   = null;
            GatewayRouteInfo routeInfo = null;

            try
            {
                var path = context.Request.Path.Value;
                var type = context.Request.Method;

                var segmentsMatch = Regex.Match(path, "^/?api/Gateway(/(?!orchestration)(?<api>.*?)/(?<key>.*?)(/.*?)?)?$",
                                                RegexOptions.IgnoreCase | RegexOptions.Compiled);

                if (segmentsMatch.Success)
                {
                    var api = segmentsMatch.Groups["api"].Captures[0].Value;
                    var key = segmentsMatch.Groups["key"].Captures[0].Value;

                    apiInfo = orchestrator.GetApi(api.ToString());

                    routeInfo = apiInfo.Mediator.GetRoute(path + type);

                    if (routeInfo.Verb.ToString() != context.Request.Method.ToUpper())
                    {
                        throw new Exception("Invalid verb");
                    }
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Api Gateway Orchestration api/key error.");

                context.Response.StatusCode = StatusCodes.Status404NotFound;

                await context.Response.CompleteAsync();

                return;
            }

            try
            {
                await _next(context);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Api Gateway error.");

                await HandleExceptionAsync(context, ex);
            }
        }
Example #3
0
        public IMediator AddRoute(string key, GatewayVerb verb, Func <ApiInfo, HttpRequest, Task <object> > exec)
        {
            var gatewayRouteInfo = new GatewayRouteInfo
            {
                Verb  = verb,
                Route = new RouteInfo
                {
                    Exec = exec
                }
            };

            paths.Add(key.ToLower() + verb.ToString(), gatewayRouteInfo);

            return(this);
        }