diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index e1e25d5..b09b582 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -2992,6 +2992,47 @@
     BMCWEB_LOG_DEBUG << "getChassisCallback exit";
 }
 
+inline void
+    handleSensorCollectionGet(App& app, const crow::Request& req,
+                              const std::shared_ptr<bmcweb::AsyncResp>& aResp,
+                              const std::string& chassisId)
+{
+    query_param::QueryCapabilities capabilities = {
+        .canDelegateExpandLevel = 1,
+    };
+    query_param::Query delegatedQuery;
+    if (!redfish::setUpRedfishRouteWithDelegation(app, req, aResp->res,
+                                                  delegatedQuery, capabilities))
+    {
+        return;
+    }
+
+    if (delegatedQuery.expandType != query_param::ExpandType::None)
+    {
+        // we perform efficient expand.
+        auto asyncResp = std::make_shared<SensorsAsyncResp>(
+            aResp, chassisId, sensors::dbus::sensorPaths,
+            sensors::node::sensors,
+            /*efficientExpand=*/true);
+        getChassisData(asyncResp);
+
+        BMCWEB_LOG_DEBUG
+            << "SensorCollection doGet exit via efficient expand handler";
+        return;
+    };
+
+    // if there's no efficient expand available, we use the default
+    // Query Parameters route
+    auto asyncResp = std::make_shared<SensorsAsyncResp>(
+        aResp, chassisId, sensors::dbus::sensorPaths, sensors::node::sensors);
+
+    // We get all sensors as hyperlinkes in the chassis (this
+    // implies we reply on the default query parameters handler)
+    getChassis(asyncResp,
+               std::bind_front(sensors::getChassisCallback, asyncResp));
+    BMCWEB_LOG_DEBUG << "SensorCollection doGet exit";
+}
+
 inline void handleSensorGet(App& app, const crow::Request& req,
                             const std::shared_ptr<bmcweb::AsyncResp>& aResp,
                             const std::string& chassisId,
@@ -3077,45 +3118,7 @@
     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Sensors/")
         .privileges(redfish::privileges::getSensorCollection)
         .methods(boost::beast::http::verb::get)(
-            [&app](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-                   const std::string& chassisId) {
-        query_param::QueryCapabilities capabilities = {
-            .canDelegateExpandLevel = 1,
-        };
-        query_param::Query delegatedQuery;
-        if (!redfish::setUpRedfishRouteWithDelegation(
-                app, req, aResp->res, delegatedQuery, capabilities))
-        {
-            return;
-        }
-
-        if (delegatedQuery.expandType != query_param::ExpandType::None)
-        {
-            // we perform efficient expand.
-            auto asyncResp = std::make_shared<SensorsAsyncResp>(
-                aResp, chassisId, sensors::dbus::sensorPaths,
-                sensors::node::sensors,
-                /*efficientExpand=*/true);
-            getChassisData(asyncResp);
-
-            BMCWEB_LOG_DEBUG
-                << "SensorCollection doGet exit via efficient expand handler";
-            return;
-        };
-
-        // if there's no efficient expand available, we use the default
-        // Query Parameters route
-        auto asyncResp = std::make_shared<SensorsAsyncResp>(
-            aResp, chassisId, sensors::dbus::sensorPaths,
-            sensors::node::sensors);
-
-        // We get all sensors as hyperlinkes in the chassis (this
-        // implies we reply on the default query parameters handler)
-        getChassis(asyncResp,
-                   std::bind_front(sensors::getChassisCallback, asyncResp));
-        BMCWEB_LOG_DEBUG << "SensorCollection doGet exit";
-        });
+            std::bind_front(sensors::handleSensorCollectionGet, std::ref(app)));
 }
 
 inline void requestRoutesSensor(App& app)
