public IDictionary <string, RequestActionRoute> GetActionAttributeRoutes(ChromelyController controller) { if (controller == null) { return(null); } var result = new Dictionary <string, RequestActionRoute>(); var methodInfos = controller.GetType().GetMethods() .Where(m => m.GetCustomAttributes(typeof(RequestActionAttribute), false).Length > 0) .ToArray(); foreach (var item in methodInfos) { var actionAttributeDelegate = CreateDelegate(controller, item) as Func <IChromelyRequest, IChromelyResponse>; var asyncActionAttributeDelegate = CreateDelegate(controller, item) as Func <IChromelyRequest, Task <IChromelyResponse> >; var attribute = item.GetCustomAttribute <RequestActionAttribute>(); var key = RouteKey.CreateRequestKey(attribute.RouteKey); // Sync if (actionAttributeDelegate != null && attribute != null) { result[key] = new RequestActionRoute(attribute.RouteKey, actionAttributeDelegate, attribute.Description); } // Async if (asyncActionAttributeDelegate != null && attribute != null) { result[key] = new RequestActionRoute(attribute.RouteKey, asyncActionAttributeDelegate, attribute.Description); } } return(result); }
private void AddRoute(string path, RequestActionRoute route) { var actionKey = RouteKey.CreateRequestKey(path); ActionRouteDictionary[actionKey] = route; }