diff --git a/redfish-core/lib/cable.hpp b/redfish-core/lib/cable.hpp
index 51eca27..0fc36b4 100644
--- a/redfish-core/lib/cable.hpp
+++ b/redfish-core/lib/cable.hpp
@@ -151,7 +151,8 @@
 
                 asyncResp->res.jsonValue["@odata.type"] = "#Cable.v1_0_0.Cable";
                 asyncResp->res.jsonValue["@odata.id"] =
-                    "/redfish/v1/Cables/" + cableId;
+                    crow::utility::urlFromPieces("redfish", "v1", "Cables",
+                                                 cableId);
                 asyncResp->res.jsonValue["Id"] = cableId;
                 asyncResp->res.jsonValue["Name"] = "Cable";
 
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index 5489351..4db6719 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -274,16 +274,21 @@
             asyncResp->res.jsonValue["@odata.type"] =
                 "#Chassis.v1_16_0.Chassis";
             asyncResp->res.jsonValue["@odata.id"] =
-                "/redfish/v1/Chassis/" + chassisId;
+                crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+                                             chassisId);
             asyncResp->res.jsonValue["Name"] = "Chassis Collection";
             asyncResp->res.jsonValue["ChassisType"] = "RackMount";
             asyncResp->res.jsonValue["Actions"]["#Chassis.Reset"]["target"] =
-                "/redfish/v1/Chassis/" + chassisId + "/Actions/Chassis.Reset";
+                crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+                                             chassisId, "Actions",
+                                             "Chassis.Reset");
             asyncResp->res
                 .jsonValue["Actions"]["#Chassis.Reset"]["@Redfish.ActionInfo"] =
-                "/redfish/v1/Chassis/" + chassisId + "/ResetActionInfo";
+                crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+                                             chassisId, "ResetActionInfo");
             asyncResp->res.jsonValue["PCIeDevices"]["@odata.id"] =
-                "/redfish/v1/Systems/system/PCIeDevices";
+                crow::utility::urlFromPieces("redfish", "v1", "Systems",
+                                             "system", "PCIeDevices");
 
             sdbusplus::asio::getProperty<std::vector<std::string>>(
                 *crow::connections::systemBus,
@@ -398,10 +403,12 @@
                 asyncResp->res.jsonValue["Id"] = chassisId;
 #ifdef BMCWEB_ALLOW_DEPRECATED_POWER_THERMAL
                 asyncResp->res.jsonValue["Thermal"]["@odata.id"] =
-                    "/redfish/v1/Chassis/" + chassisId + "/Thermal";
+                    crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+                                                 chassisId, "Thermal");
                 // Power object
                 asyncResp->res.jsonValue["Power"]["@odata.id"] =
-                    "/redfish/v1/Chassis/" + chassisId + "/Power";
+                    crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+                                                 chassisId, "Power");
 #endif
 #ifdef BMCWEB_NEW_POWERSUBSYSTEM_THERMALSUBSYSTEM
                 asyncResp->res.jsonValue["ThermalSubsystem"]["@odata.id"] =
@@ -417,7 +424,8 @@
 #endif
                 // SensorCollection
                 asyncResp->res.jsonValue["Sensors"]["@odata.id"] =
-                    "/redfish/v1/Chassis/" + chassisId + "/Sensors";
+                    crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+                                                 chassisId, "Sensors");
                 asyncResp->res.jsonValue["Status"]["State"] = "Enabled";
 
                 nlohmann::json::array_t computerSystems;
@@ -707,8 +715,8 @@
         return;
     }
     asyncResp->res.jsonValue["@odata.type"] = "#ActionInfo.v1_1_2.ActionInfo";
-    asyncResp->res.jsonValue["@odata.id"] =
-        "/redfish/v1/Chassis/" + chassisId + "/ResetActionInfo";
+    asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+        "redfish", "v1", "Chassis", chassisId, "ResetActionInfo");
     asyncResp->res.jsonValue["Name"] = "Reset Action Info";
 
     asyncResp->res.jsonValue["Id"] = "ResetActionInfo";
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index e0fcb2e..8cdb7e0 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -1636,8 +1636,8 @@
 
     nlohmann::json& jsonResponse = asyncResp->res.jsonValue;
     jsonResponse["Id"] = ifaceId;
-    jsonResponse["@odata.id"] =
-        "/redfish/v1/Managers/bmc/EthernetInterfaces/" + ifaceId;
+    jsonResponse["@odata.id"] = crow::utility::urlFromPieces(
+        "redfish", "v1", "Managers", "bmc", "EthernetInterfaces", ifaceId);
     jsonResponse["InterfaceEnabled"] = ethData.nicEnabled;
 
     auto health = std::make_shared<HealthPopulate>(asyncResp);
@@ -1810,9 +1810,9 @@
                 if (found == std::string::npos)
                 {
                     nlohmann::json::object_t iface;
-                    iface["@odata.id"] =
-                        "/redfish/v1/Managers/bmc/EthernetInterfaces/" +
-                        ifaceItem;
+                    iface["@odata.id"] = crow::utility::urlFromPieces(
+                        "redfish", "v1", "Managers", "bmc",
+                        "EthernetInterfaces", ifaceItem);
                     ifaceArray.push_back(std::move(iface));
                 }
             }
@@ -2044,8 +2044,9 @@
             {
                 asyncResp->res.jsonValue["Id"] = ifaceId;
                 asyncResp->res.jsonValue["@odata.id"] =
-                    "/redfish/v1/Managers/bmc/EthernetInterfaces/" +
-                    parentIfaceId + "/VLANs/" + ifaceId;
+                    crow::utility::urlFromPieces(
+                        "redfish", "v1", "Managers", "bmc",
+                        "EthernetInterfaces", parentIfaceId, "VLANs", ifaceId);
 
                 asyncResp->res.jsonValue["VLANEnable"] = ethData.nicEnabled;
                 asyncResp->res.jsonValue["VLANId"] = *ethData.vlanId;
@@ -2230,13 +2231,11 @@
             {
                 if (ifaceItem.starts_with(rootInterfaceName + "_"))
                 {
-                    std::string path =
-                        "/redfish/v1/Managers/bmc/EthernetInterfaces/";
-                    path += rootInterfaceName;
-                    path += "/VLANs/";
-                    path += ifaceItem;
                     nlohmann::json::object_t iface;
-                    iface["@odata.id"] = std::move(path);
+                    iface["@odata.id"] = crow::utility::urlFromPieces(
+                        "redfish", "v1", "Managers", "bmc",
+                        "EthernetInterfaces", rootInterfaceName, "VLANs",
+                        ifaceItem);
                     ifaceArray.push_back(std::move(iface));
                 }
             }
@@ -2244,8 +2243,9 @@
             asyncResp->res.jsonValue["Members@odata.count"] = ifaceArray.size();
             asyncResp->res.jsonValue["Members"] = std::move(ifaceArray);
             asyncResp->res.jsonValue["@odata.id"] =
-                "/redfish/v1/Managers/bmc/EthernetInterfaces/" +
-                rootInterfaceName + "/VLANs";
+                crow::utility::urlFromPieces("redfish", "v1", "Managers", "bmc",
+                                             "EthernetInterfaces",
+                                             rootInterfaceName, "VLANs");
         });
         });
 
diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp
index b558030..0fd603f 100644
--- a/redfish-core/lib/hypervisor_system.hpp
+++ b/redfish-core/lib/hypervisor_system.hpp
@@ -488,7 +488,8 @@
 {
     jsonResponse["Id"] = ifaceId;
     jsonResponse["@odata.id"] =
-        "/redfish/v1/Systems/hypervisor/EthernetInterfaces/" + ifaceId;
+        crow::utility::urlFromPieces("redfish", "v1", "Systems", "hypervisor",
+                                     "EthernetInterfaces", ifaceId);
     jsonResponse["InterfaceEnabled"] = true;
     jsonResponse["MACAddress"] = ethData.macAddress;
 
@@ -823,8 +824,9 @@
                     continue;
                 }
                 nlohmann::json::object_t ethIface;
-                ethIface["@odata.id"] =
-                    "/redfish/v1/Systems/hypervisor/EthernetInterfaces/" + name;
+                ethIface["@odata.id"] = crow::utility::urlFromPieces(
+                    "redfish", "v1", "Systems", "hypervisor",
+                    "EthernetInterfaces", name);
                 ifaceArray.push_back(std::move(ethIface));
             }
             asyncResp->res.jsonValue["Members@odata.count"] = ifaceArray.size();
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index b807bc4..bb9552a 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -1295,8 +1295,9 @@
 
     // Fill in the log entry with the gathered data
     logEntryJson["@odata.type"] = "#LogEntry.v1_9_0.LogEntry";
-    logEntryJson["@odata.id"] =
-        "/redfish/v1/Systems/system/LogServices/EventLog/Entries/" + logEntryID;
+    logEntryJson["@odata.id"] = crow::utility::urlFromPieces(
+        "redfish", "v1", "Systems", "system", "LogServices", "EventLog",
+        "Entries", logEntryID);
     logEntryJson["Name"] = "System Event Log Entry";
     logEntryJson["Id"] = logEntryID;
     logEntryJson["Message"] = std::move(msg);
@@ -1629,9 +1630,9 @@
                 entriesArray.push_back({});
                 nlohmann::json& thisEntry = entriesArray.back();
                 thisEntry["@odata.type"] = "#LogEntry.v1_9_0.LogEntry";
-                thisEntry["@odata.id"] =
-                    "/redfish/v1/Systems/system/LogServices/EventLog/Entries/" +
-                    std::to_string(*id);
+                thisEntry["@odata.id"] = crow::utility::urlFromPieces(
+                    "redfish", "v1", "Systems", "system", "LogServices",
+                    "EventLog", "Entries", std::to_string(*id));
                 thisEntry["Name"] = "System Event Log Entry";
                 thisEntry["Id"] = std::to_string(*id);
                 thisEntry["Message"] = *message;
@@ -1750,8 +1751,9 @@
             asyncResp->res.jsonValue["@odata.type"] =
                 "#LogEntry.v1_9_0.LogEntry";
             asyncResp->res.jsonValue["@odata.id"] =
-                "/redfish/v1/Systems/system/LogServices/EventLog/Entries/" +
-                std::to_string(*id);
+                crow::utility::urlFromPieces(
+                    "redfish", "v1", "Systems", "system", "LogServices",
+                    "EventLog", "Entries", std::to_string(*id));
             asyncResp->res.jsonValue["Name"] = "System Event Log Entry";
             asyncResp->res.jsonValue["Id"] = std::to_string(*id);
             asyncResp->res.jsonValue["Message"] = *message;
@@ -2047,9 +2049,9 @@
 {
     // Fill in the log entry with the gathered data.
     logEntryJson["@odata.type"] = "#LogEntry.v1_9_0.LogEntry";
-    logEntryJson["@odata.id"] =
-        "/redfish/v1/Systems/system/LogServices/HostLogger/Entries/" +
-        logEntryID;
+    logEntryJson["@odata.id"] = crow::utility::urlFromPieces(
+        "redfish", "v1", "Systems", "system", "LogServices", "HostLogger",
+        "Entries", logEntryID);
     logEntryJson["Name"] = "Host Logger Entry";
     logEntryJson["Id"] = logEntryID;
     logEntryJson["Message"] = msg;
@@ -2397,9 +2399,9 @@
 
     // Fill in the log entry with the gathered data
     bmcJournalLogEntryJson["@odata.type"] = "#LogEntry.v1_9_0.LogEntry";
-    bmcJournalLogEntryJson["@odata.id"] =
-        "/redfish/v1/Managers/bmc/LogServices/Journal/Entries/" +
-        bmcJournalLogEntryID;
+    bmcJournalLogEntryJson["@odata.id"] = crow::utility::urlFromPieces(
+        "redfish", "v1", "Managers", "bmc", "LogServices", "Journal", "Entries",
+        bmcJournalLogEntryID);
     bmcJournalLogEntryJson["Name"] = "BMC Journal Entry";
     bmcJournalLogEntryJson["Id"] = bmcJournalLogEntryID;
     bmcJournalLogEntryJson["Message"] = std::move(message);
@@ -3018,7 +3020,8 @@
             redfishDateTimeOffset.second;
 
         asyncResp->res.jsonValue["Entries"]["@odata.id"] =
-            "/redfish/v1/Systems/system/LogServices/Crashdump/Entries";
+            crow::utility::urlFromPieces("redfish", "v1", "Systems", "system",
+                                         "LogServices", "Crashdump", "Entries");
         asyncResp->res.jsonValue["Actions"]["#LogService.ClearLog"]["target"] =
             "/redfish/v1/Systems/system/LogServices/Crashdump/Actions/LogService.ClearLog";
         asyncResp->res.jsonValue["Actions"]["#LogService.CollectDiagnosticData"]
@@ -3102,8 +3105,9 @@
             logID + "/" + filename;
         nlohmann::json::object_t logEntry;
         logEntry["@odata.type"] = "#LogEntry.v1_9_0.LogEntry";
-        logEntry["@odata.id"] =
-            "/redfish/v1/Systems/system/LogServices/Crashdump/Entries/" + logID;
+        logEntry["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "Systems", "system", "LogServices", "Crashdump",
+            "Entries", logID);
         logEntry["Name"] = "CPU Crashdump";
         logEntry["Id"] = logID;
         logEntry["EntryType"] = "Oem";
@@ -3741,9 +3745,9 @@
         // Format entry
         nlohmann::json::object_t bmcLogEntry;
         bmcLogEntry["@odata.type"] = "#LogEntry.v1_9_0.LogEntry";
-        bmcLogEntry["@odata.id"] =
-            "/redfish/v1/Systems/system/LogServices/PostCodes/Entries/" +
-            postcodeEntryID;
+        bmcLogEntry["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "Systems", "system", "LogServices", "PostCodes",
+            "Entries", postcodeEntryID);
         bmcLogEntry["Name"] = "POST Code Log Entry";
         bmcLogEntry["Id"] = postcodeEntryID;
         bmcLogEntry["Message"] = std::move(msg);
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index 376f70c..9da1be0 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -394,6 +394,8 @@
                     }
                 }
 
+                boost::urls::url url = crow::utility::urlFromPieces(
+                    "redfish", "v1", "Managers", "bmc");
                 if (intfPair.first == pidZoneConfigurationIface)
                 {
                     std::string chassis;
@@ -403,11 +405,12 @@
                         chassis = "#IllegalValue";
                     }
                     nlohmann::json& zone = zones[name];
-                    zone["Chassis"]["@odata.id"] =
-                        "/redfish/v1/Chassis/" + chassis;
-                    zone["@odata.id"] =
-                        "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanZones/" +
-                        name;
+                    zone["Chassis"]["@odata.id"] = crow::utility::urlFromPieces(
+                        "redfish", "v1", "Chassis", chassis);
+                    url.set_fragment(
+                        ("/Oem/OpenBmc/Fan/FanZones"_json_pointer / name)
+                            .to_string());
+                    zone["@odata.id"] = std::move(url);
                     zone["@odata.type"] = "#OemManager.FanZone";
                     config = &zone;
                 }
@@ -423,10 +426,11 @@
 
                     nlohmann::json& controller = stepwise[name];
                     config = &controller;
-
-                    controller["@odata.id"] =
-                        "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/StepwiseControllers/" +
-                        name;
+                    url.set_fragment(
+                        ("/Oem/OpenBmc/Fan/StepwiseControllers"_json_pointer /
+                         name)
+                            .to_string());
+                    controller["@odata.id"] = std::move(url);
                     controller["@odata.type"] =
                         "#OemManager.StepwiseController";
 
@@ -448,16 +452,20 @@
                     config = &element;
                     if (isFan)
                     {
-                        element["@odata.id"] =
-                            "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanControllers/" +
-                            name;
+                        url.set_fragment(
+                            ("/Oem/OpenBmc/Fan/FanControllers"_json_pointer /
+                             name)
+                                .to_string());
+                        element["@odata.id"] = std::move(url);
                         element["@odata.type"] = "#OemManager.FanController";
                     }
                     else
                     {
-                        element["@odata.id"] =
-                            "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/PidControllers/" +
-                            name;
+                        url.set_fragment(
+                            ("/Oem/OpenBmc/Fan/PidControllers"_json_pointer /
+                             name)
+                                .to_string());
+                        element["@odata.id"] = std::move(url);
                         element["@odata.type"] = "#OemManager.PidController";
                     }
                 }
@@ -580,9 +588,14 @@
                             {
                                 dbus::utility::escapePathForDbus(itemCopy);
                                 nlohmann::json::object_t input;
-                                input["@odata.id"] =
-                                    "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanZones/" +
-                                    itemCopy;
+                                boost::urls::url managerUrl =
+                                    crow::utility::urlFromPieces(
+                                        "redfish", "v1", "Managers", "bmc");
+                                managerUrl.set_fragment(
+                                    ("/Oem/OpenBmc/Fan/FanZones"_json_pointer /
+                                     itemCopy)
+                                        .to_string());
+                                input["@odata.id"] = std::move(managerUrl);
                                 data.push_back(std::move(input));
                             }
                         }
@@ -2043,12 +2056,14 @@
             aRsp->res.jsonValue["Links"]["ManagerForChassis@odata.count"] = 1;
             nlohmann::json::array_t managerForChassis;
             nlohmann::json::object_t managerObj;
-            managerObj["@odata.id"] = "/redfish/v1/Chassis/" + chassisId;
+            boost::urls::url chassiUrl = crow::utility::urlFromPieces(
+                "redfish", "v1", "Chassis", chassisId);
+            managerObj["@odata.id"] = chassiUrl;
             managerForChassis.push_back(std::move(managerObj));
             aRsp->res.jsonValue["Links"]["ManagerForChassis"] =
                 std::move(managerForChassis);
             aRsp->res.jsonValue["Links"]["ManagerInChassis"]["@odata.id"] =
-                "/redfish/v1/Chassis/" + chassisId;
+                chassiUrl;
         });
 
         static bool started = false;
diff --git a/redfish-core/lib/memory.hpp b/redfish-core/lib/memory.hpp
index e55eded..6e77816 100644
--- a/redfish-core/lib/memory.hpp
+++ b/redfish-core/lib/memory.hpp
@@ -760,8 +760,8 @@
         }
         // Set @odata only if object is found
         aResp->res.jsonValue["@odata.type"] = "#Memory.v1_11_0.Memory";
-        aResp->res.jsonValue["@odata.id"] =
-            "/redfish/v1/Systems/system/Memory/" + dimmId;
+        aResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "Systems", "system", "Memory", dimmId);
         return;
         });
 }
diff --git a/redfish-core/lib/message_registries.hpp b/redfish-core/lib/message_registries.hpp
index 41e7e93..41464bc 100644
--- a/redfish-core/lib/message_registries.hpp
+++ b/redfish-core/lib/message_registries.hpp
@@ -111,7 +111,7 @@
     }
 
     asyncResp->res.jsonValue["@odata.id"] =
-        "/redfish/v1/Registries/" + registry;
+        crow::utility::urlFromPieces("redfish", "v1", "Registries", registry);
     asyncResp->res.jsonValue["@odata.type"] =
         "#MessageRegistryFile.v1_1_0.MessageRegistryFile";
     asyncResp->res.jsonValue["Name"] = registry + " Message Registry File";
diff --git a/redfish-core/lib/pcie.hpp b/redfish-core/lib/pcie.hpp
index 77afd0a..5332a39 100644
--- a/redfish-core/lib/pcie.hpp
+++ b/redfish-core/lib/pcie.hpp
@@ -67,8 +67,8 @@
                 continue;
             }
             nlohmann::json::object_t pcieDevice;
-            pcieDevice["@odata.id"] =
-                "/redfish/v1/Systems/system/PCIeDevices/" + devName;
+            pcieDevice["@odata.id"] = crow::utility::urlFromPieces(
+                "redfish", "v1", "Systems", "system", "PCIeDevices", devName);
             pcieDeviceList.push_back(std::move(pcieDevice));
         }
         asyncResp->res.jsonValue[name + "@odata.count"] = pcieDeviceList.size();
@@ -242,13 +242,15 @@
             asyncResp->res.jsonValue["@odata.type"] =
                 "#PCIeDevice.v1_4_0.PCIeDevice";
             asyncResp->res.jsonValue["@odata.id"] =
-                "/redfish/v1/Systems/system/PCIeDevices/" + device;
+                crow::utility::urlFromPieces("redfish", "v1", "Systems",
+                                             "system", "PCIeDevices", device);
             asyncResp->res.jsonValue["Name"] = "PCIe Device";
             asyncResp->res.jsonValue["Id"] = device;
 
             asyncResp->res.jsonValue["PCIeFunctions"]["@odata.id"] =
-                "/redfish/v1/Systems/system/PCIeDevices/" + device +
-                "/PCIeFunctions";
+                crow::utility::urlFromPieces("redfish", "v1", "Systems",
+                                             "system", "PCIeDevices", device,
+                                             "PCIeFunctions");
         };
         std::string escapedPath = std::string(pciePath) + "/" + device;
         dbus::utility::escapePathForDbus(escapedPath);
@@ -277,9 +279,9 @@
 
         asyncResp->res.jsonValue["@odata.type"] =
             "#PCIeFunctionCollection.PCIeFunctionCollection";
-        asyncResp->res.jsonValue["@odata.id"] =
-            "/redfish/v1/Systems/system/PCIeDevices/" + device +
-            "/PCIeFunctions";
+        asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "Systems", "system", "PCIeDevices", device,
+            "PCIeFunctions");
         asyncResp->res.jsonValue["Name"] = "PCIe Function Collection";
         asyncResp->res.jsonValue["Description"] =
             "Collection of PCIe Functions for PCIe Device " + device;
@@ -330,9 +332,9 @@
                     continue;
                 }
                 nlohmann::json::object_t pcieFunction;
-                pcieFunction["@odata.id"] =
-                    "/redfish/v1/Systems/system/PCIeDevices/" + device +
-                    "/PCIeFunctions/" + std::to_string(functionNum);
+                pcieFunction["@odata.id"] = crow::utility::urlFromPieces(
+                    "redfish", "v1", "Systems", "system", "PCIeDevices", device,
+                    "PCIeFunctions", std::to_string(functionNum));
                 pcieFunctionList.push_back(std::move(pcieFunction));
             }
             asyncResp->res.jsonValue["Members@odata.count"] =
@@ -406,13 +408,15 @@
             asyncResp->res.jsonValue["@odata.type"] =
                 "#PCIeFunction.v1_2_0.PCIeFunction";
             asyncResp->res.jsonValue["@odata.id"] =
-                "/redfish/v1/Systems/system/PCIeDevices/" + device +
-                "/PCIeFunctions/" + function;
+                crow::utility::urlFromPieces("redfish", "v1", "Systems",
+                                             "system", "PCIeDevices", device,
+                                             "PCIeFunctions", function);
             asyncResp->res.jsonValue["Name"] = "PCIe Function";
             asyncResp->res.jsonValue["Id"] = function;
             asyncResp->res.jsonValue["FunctionId"] = std::stoi(function);
             asyncResp->res.jsonValue["Links"]["PCIeDevice"]["@odata.id"] =
-                "/redfish/v1/Systems/system/PCIeDevices/" + device;
+                crow::utility::urlFromPieces("redfish", "v1", "Systems",
+                                             "system", "PCIeDevices", device);
 
             for (const auto& property : pcieDevProperties)
             {
diff --git a/redfish-core/lib/processor.hpp b/redfish-core/lib/processor.hpp
index 1ac29ff..8b1bfa9 100644
--- a/redfish-core/lib/processor.hpp
+++ b/redfish-core/lib/processor.hpp
@@ -551,10 +551,10 @@
         if (appliedConfig != nullptr)
         {
             const std::string& dbusPath = appliedConfig->str;
-            std::string uri = "/redfish/v1/Systems/system/Processors/" + cpuId +
-                              "/OperatingConfigs";
             nlohmann::json::object_t operatingConfig;
-            operatingConfig["@odata.id"] = uri;
+            operatingConfig["@odata.id"] = crow::utility::urlFromPieces(
+                "redfish", "v1", "Systems", "system", "Processors", cpuId,
+                "OperatingConfigs");
             json["OperatingConfigs"] = std::move(operatingConfig);
 
             // Reuse the D-Bus config object name for the Redfish
@@ -569,10 +569,10 @@
                 messages::internalError(aResp->res);
                 return;
             }
-            uri += '/';
-            uri += dbusPath.substr(baseNamePos + 1);
             nlohmann::json::object_t appliedOperatingConfig;
-            appliedOperatingConfig["@odata.id"] = uri;
+            appliedOperatingConfig["@odata.id"] = crow::utility::urlFromPieces(
+                "redfish", "v1", "Systems", "system", "Processors", cpuId,
+                "OperatingConfigs", dbusPath.substr(baseNamePos + 1));
             json["AppliedOperatingConfig"] = std::move(appliedOperatingConfig);
 
             // Once we found the current applied config, queue another
@@ -1256,8 +1256,8 @@
             "</redfish/v1/JsonSchemas/Processor/Processor.json>; rel=describedby");
         asyncResp->res.jsonValue["@odata.type"] =
             "#Processor.v1_11_0.Processor";
-        asyncResp->res.jsonValue["@odata.id"] =
-            "/redfish/v1/Systems/system/Processors/" + processorId;
+        asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "Systems", "system", "Processors", processorId);
 
         getProcessorObject(
             asyncResp, processorId,
diff --git a/redfish-core/lib/redfish_sessions.hpp b/redfish-core/lib/redfish_sessions.hpp
index 5ae6674..9dcb873 100644
--- a/redfish-core/lib/redfish_sessions.hpp
+++ b/redfish-core/lib/redfish_sessions.hpp
@@ -31,8 +31,8 @@
 {
     res.jsonValue["Id"] = session.uniqueId;
     res.jsonValue["UserName"] = session.username;
-    res.jsonValue["@odata.id"] =
-        "/redfish/v1/SessionService/Sessions/" + session.uniqueId;
+    res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+        "redfish", "SessionService", "Sessions", session.uniqueId);
     res.jsonValue["@odata.type"] = "#Session.v1_5_0.Session";
     res.jsonValue["Name"] = "User Session";
     res.jsonValue["Description"] = "Manager User Session";
@@ -127,7 +127,8 @@
     for (const std::string* uid : sessionIds)
     {
         nlohmann::json::object_t session;
-        session["@odata.id"] = "/redfish/v1/SessionService/Sessions/" + *uid;
+        session["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "SessionService", "Sessions", *uid);
         ret.push_back(std::move(session));
     }
     return ret;
diff --git a/redfish-core/lib/roles.hpp b/redfish-core/lib/roles.hpp
index 413cd8c..fe9110c 100644
--- a/redfish-core/lib/roles.hpp
+++ b/redfish-core/lib/roles.hpp
@@ -93,8 +93,8 @@
         asyncResp->res.jsonValue["IsPredefined"] = true;
         asyncResp->res.jsonValue["Id"] = roleId;
         asyncResp->res.jsonValue["RoleId"] = roleId;
-        asyncResp->res.jsonValue["@odata.id"] =
-            "/redfish/v1/AccountService/Roles/" + roleId;
+        asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "AccountService", "Roles", roleId);
         asyncResp->res.jsonValue["AssignedPrivileges"] = std::move(privArray);
         });
 }
@@ -137,8 +137,8 @@
                 if (!role.empty())
                 {
                     nlohmann::json::object_t member;
-                    member["@odata.id"] =
-                        "/redfish/v1/AccountService/Roles/" + role;
+                    member["@odata.id"] = crow::utility::urlFromPieces(
+                        "redfish", "v1", "AccountService", "Roles", role);
                     memberArray.push_back(std::move(member));
                 }
             }
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index e6d7a7a..3ff4842 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -559,8 +559,8 @@
         }
         populateChassisNode(asyncResp->res.jsonValue, chassisSubNode);
 
-        asyncResp->res.jsonValue["@odata.id"] =
-            "/redfish/v1/Chassis/" + chassisIdStr + "/" + chassisSubNode;
+        asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "Chassis", chassisIdStr, chassisSubNode);
 
         // Get the list of all sensors for this Chassis element
         std::string sensorPath = *chassisPath + "/all_sensors";
@@ -1128,10 +1128,12 @@
                                                 .jsonValue["Redundancy"];
 
                     nlohmann::json::object_t redundancy;
-                    redundancy["@odata.id"] =
-                        "/redfish/v1/Chassis/" + sensorsAsyncResp->chassisId +
-                        "/" + sensorsAsyncResp->chassisSubNode +
-                        "#/Redundancy/" + std::to_string(jResp.size());
+                    boost::urls::url url = crow::utility::urlFromPieces(
+                        "redfish", "v1", "Chassis", sensorsAsyncResp->chassisId,
+                        sensorsAsyncResp->chassisSubNode);
+                    url.set_fragment(("/Redundancy"_json_pointer / jResp.size())
+                                         .to_string());
+                    redundancy["@odata.id"] = std::move(url);
                     redundancy["@odata.type"] = "#Redundancy.v1_3_2.Redundancy";
                     redundancy["MinNumNeeded"] = minNumNeeded;
                     redundancy["MemberId"] = name;
@@ -1179,7 +1181,7 @@
                 std::string* value = odata->get_ptr<std::string*>();
                 if (value != nullptr)
                 {
-                    *value += std::to_string(count);
+                    *value += "/" + std::to_string(count);
                     count++;
                     sensorsAsyncResp->updateUri(sensorJson["Name"], *value);
                 }
@@ -2199,8 +2201,10 @@
     // Add new PowerSupply object to JSON array
     powerSupplyArray.push_back({});
     nlohmann::json& powerSupply = powerSupplyArray.back();
-    powerSupply["@odata.id"] =
-        "/redfish/v1/Chassis/" + chassisId + "/Power#/PowerSupplies/";
+    boost::urls::url url = crow::utility::urlFromPieces(
+        "redfish", "v1", "Chassis", chassisId, "Power");
+    url.set_fragment(("/PowerSupplies"_json_pointer).to_string());
+    powerSupply["@odata.id"] = std::move(url);
     powerSupply["MemberId"] = inventoryItem.name;
     powerSupply["Name"] = boost::replace_all_copy(inventoryItem.name, "_", " ");
     powerSupply["Manufacturer"] = inventoryItem.manufacturer;
@@ -2383,11 +2387,13 @@
                             // PowerControl. Follows MemberId naming and
                             // naming in power.hpp.
                             nlohmann::json::object_t power;
-                            power["@odata.id"] =
-                                "/redfish/v1/Chassis/" +
-                                sensorsAsyncResp->chassisId + "/" +
-                                sensorsAsyncResp->chassisSubNode + "#/" +
-                                fieldName + "/0";
+                            boost::urls::url url = crow::utility::urlFromPieces(
+                                "redfish", "v1", "Chassis",
+                                sensorsAsyncResp->chassisId,
+                                sensorsAsyncResp->chassisSubNode);
+                            url.set_fragment((""_json_pointer / fieldName / "0")
+                                                 .to_string());
+                            power["@odata.id"] = std::move(url);
                             tempArray.push_back(std::move(power));
                         }
                         sensorJson = &(tempArray.back());
@@ -2423,11 +2429,13 @@
                     else
                     {
                         nlohmann::json::object_t member;
-                        member["@odata.id"] = "/redfish/v1/Chassis/" +
-                                              sensorsAsyncResp->chassisId +
-                                              "/" +
-                                              sensorsAsyncResp->chassisSubNode +
-                                              "#/" + fieldName + "/";
+                        boost::urls::url url = crow::utility::urlFromPieces(
+                            "redfish", "v1", "Chassis",
+                            sensorsAsyncResp->chassisId,
+                            sensorsAsyncResp->chassisSubNode);
+                        url.set_fragment(
+                            (""_json_pointer / fieldName).to_string());
+                        member["@odata.id"] = std::move(url);
                         tempArray.push_back(std::move(member));
                         sensorJson = &(tempArray.back());
                     }
diff --git a/redfish-core/lib/storage.hpp b/redfish-core/lib/storage.hpp
index 93911e5..88ced62 100644
--- a/redfish-core/lib/storage.hpp
+++ b/redfish-core/lib/storage.hpp
@@ -102,9 +102,9 @@
             }
 
             nlohmann::json::object_t driveJson;
-            driveJson["@odata.id"] =
-                "/redfish/v1/Systems/system/Storage/1/Drives/" +
-                object.filename();
+            driveJson["@odata.id"] = crow::utility::urlFromPieces(
+                "redfish", "v1", "Systems", "system", "Storage", "1", "Drives",
+                object.filename());
             driveArray.push_back(std::move(driveJson));
         }
 
@@ -158,8 +158,10 @@
             storageController["@odata.type"] =
                 "#Storage.v1_7_0.StorageController";
             storageController["@odata.id"] =
-                "/redfish/v1/Systems/system/Storage/1#/StorageControllers/" +
-                std::to_string(index);
+                crow::utility::urlFromPieces("redfish", "v1", "Systems",
+                                             "system", "Storage", "1")
+                    .set_fragment(("/StorageControllers"_json_pointer / index)
+                                      .to_string());
             storageController["Name"] = id;
             storageController["MemberId"] = id;
             storageController["Status"]["State"] = "Enabled";
@@ -607,7 +609,9 @@
 
             asyncResp->res.jsonValue["@odata.type"] = "#Drive.v1_7_0.Drive";
             asyncResp->res.jsonValue["@odata.id"] =
-                "/redfish/v1/Systems/system/Storage/1/Drives/" + driveId;
+                crow::utility::urlFromPieces("redfish", "v1", "Systems",
+                                             "system", "Storage", "1", "Drives",
+                                             driveId);
             asyncResp->res.jsonValue["Name"] = driveId;
             asyncResp->res.jsonValue["Id"] = driveId;
 
@@ -623,7 +627,8 @@
                 asyncResp, [](const std::string& chassisId,
                               const std::shared_ptr<bmcweb::AsyncResp>& aRsp) {
                     aRsp->res.jsonValue["Links"]["Chassis"]["@odata.id"] =
-                        "/redfish/v1/Chassis/" + chassisId;
+                        crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+                                                     chassisId);
                 });
 
             // default it to Enabled
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index d6f4fba..06729fd 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -3000,7 +3000,8 @@
                             const std::shared_ptr<bmcweb::AsyncResp>& aRsp) {
             nlohmann::json::array_t chassisArray;
             nlohmann::json& chassis = chassisArray.emplace_back();
-            chassis["@odata.id"] = "/redfish/v1/Chassis/" + chassisId;
+            chassis["@odata.id"] = crow::utility::urlFromPieces(
+                "redfish", "v1", "Chassis", chassisId);
             aRsp->res.jsonValue["Links"]["Chassis"] = std::move(chassisArray);
         });
 
diff --git a/redfish-core/lib/task.hpp b/redfish-core/lib/task.hpp
index 950eac3..563f06f 100644
--- a/redfish-core/lib/task.hpp
+++ b/redfish-core/lib/task.hpp
@@ -409,8 +409,8 @@
         }
         asyncResp->res.jsonValue["TaskStatus"] = ptr->status;
         asyncResp->res.jsonValue["Messages"] = ptr->messages;
-        asyncResp->res.jsonValue["@odata.id"] =
-            "/redfish/v1/TaskService/Tasks/" + strParam;
+        asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "TaskService", "Tasks", strParam);
         if (!ptr->gave204)
         {
             asyncResp->res.jsonValue["TaskMonitor"] =
@@ -456,8 +456,9 @@
                 continue; // shouldn't be possible
             }
             nlohmann::json::object_t member;
-            member["@odata.id"] =
-                "redfish/v1/TaskService/Tasks/" + std::to_string(task->index);
+            member["@odata.id"] = crow::utility::urlFromPieces(
+                "redfish", "v1", "TaskService", "Tasks",
+                std::to_string(task->index));
             members.emplace_back(std::move(member));
         }
         });
diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp
index cf5ac0d..c7b1593 100644
--- a/redfish-core/lib/update_service.hpp
+++ b/redfish-core/lib/update_service.hpp
@@ -786,8 +786,9 @@
 
                 nlohmann::json& members = asyncResp->res.jsonValue["Members"];
                 nlohmann::json::object_t member;
-                member["@odata.id"] =
-                    "/redfish/v1/UpdateService/FirmwareInventory/" + swId;
+                member["@odata.id"] = crow::utility::urlFromPieces(
+                    "redfish", "v1", "UpdateService", "FirmwareInventory",
+                    swId);
                 members.push_back(std::move(member));
                 asyncResp->res.jsonValue["Members@odata.count"] =
                     members.size();
@@ -909,8 +910,8 @@
         std::shared_ptr<std::string> swId =
             std::make_shared<std::string>(param);
 
-        asyncResp->res.jsonValue["@odata.id"] =
-            "/redfish/v1/UpdateService/FirmwareInventory/" + *swId;
+        asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+            "redfish", "v1", "UpdateService", "FirmwareInventory", *swId);
 
         constexpr std::array<std::string_view, 1> interfaces = {
             "xyz.openbmc_project.Software.Version"};
