diff --git a/http/routing.hpp b/http/routing.hpp
index 6f42d22..85bc626 100644
--- a/http/routing.hpp
+++ b/http/routing.hpp
@@ -521,12 +521,6 @@
     {
         FindRouteResponse findRoute;
 
-        std::optional<HttpVerb> verb = httpVerbFromBoost(req.method());
-        if (!verb)
-        {
-            return findRoute;
-        }
-        size_t reqMethodIndex = static_cast<size_t>(*verb);
         // Check to see if this url exists at any verb
         for (size_t perMethodIndex = 0; perMethodIndex <= maxVerbIndex;
              perMethodIndex++)
@@ -546,11 +540,26 @@
             }
             HttpVerb thisVerb = static_cast<HttpVerb>(perMethodIndex);
             findRoute.allowHeader += httpVerbToString(thisVerb);
-            if (perMethodIndex == reqMethodIndex)
-            {
-                findRoute.route = route;
-            }
         }
+
+        std::optional<HttpVerb> verb = httpVerbFromBoost(req.method());
+        if (!verb)
+        {
+            return findRoute;
+        }
+        size_t reqMethodIndex = static_cast<size_t>(*verb);
+        if (reqMethodIndex >= perMethods.size())
+        {
+            return findRoute;
+        }
+
+        FindRoute route = findRouteByPerMethod(req.url().encoded_path(),
+                                               perMethods[reqMethodIndex]);
+        if (route.rule != nullptr)
+        {
+            findRoute.route = route;
+        }
+
         return findRoute;
     }
 
@@ -595,13 +604,6 @@
     void handle(const std::shared_ptr<Request>& req,
                 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
     {
-        std::optional<HttpVerb> verb = httpVerbFromBoost(req->method());
-        if (!verb || static_cast<size_t>(*verb) >= perMethods.size())
-        {
-            asyncResp->res.result(boost::beast::http::status::not_found);
-            return;
-        }
-
         FindRouteResponse foundRoute = findRoute(*req);
 
         if (foundRoute.route.rule == nullptr)
@@ -648,7 +650,7 @@
         std::vector<std::string> params = std::move(foundRoute.route.params);
 
         BMCWEB_LOG_DEBUG("Matched rule '{}' {} / {}", rule.rule,
-                         static_cast<uint32_t>(*verb), rule.getMethods());
+                         req->methodString(), rule.getMethods());
 
         if (req->session == nullptr)
         {
