diff --git a/redfish-core/include/error_messages.hpp b/redfish-core/include/error_messages.hpp
index 76052fc..50bcfa0 100644
--- a/redfish-core/include/error_messages.hpp
+++ b/redfish-core/include/error_messages.hpp
@@ -1033,6 +1033,14 @@
 
 void insufficientStorage(crow::Response& res);
 
+/**
+ * @brief Formats OperationNotAllowed message into JSON
+ * Message body: "he HTTP method is not allowed on this resource."
+ * @returns Message OperationNotAllowed formatted to JSON */
+nlohmann::json operationNotAllowed();
+
+void operationNotAllowed(crow::Response& res);
+
 } // namespace messages
 
 } // namespace redfish
diff --git a/redfish-core/lib/redfish_v1.hpp b/redfish-core/lib/redfish_v1.hpp
index 6aa3ee6..8907709 100644
--- a/redfish-core/lib/redfish_v1.hpp
+++ b/redfish-core/lib/redfish_v1.hpp
@@ -46,6 +46,29 @@
     messages::resourceNotFound(asyncResp->res, "", nameStr);
 }
 
+inline void redfish405(App& app, const crow::Request& req,
+                       const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+                       const std::string& path)
+{
+    // If we fall to this route, we didn't have a more specific route, so return
+    // 405
+    if (!redfish::setUpRedfishRoute(app, req, asyncResp))
+    {
+        return;
+    }
+
+    BMCWEB_LOG_ERROR << "405 on path " << path;
+    asyncResp->res.result(boost::beast::http::status::method_not_allowed);
+    if (req.method() == boost::beast::http::verb::delete_)
+    {
+        messages::resourceCannotBeDeleted(asyncResp->res);
+    }
+    else
+    {
+        messages::operationNotAllowed(asyncResp->res);
+    }
+}
+
 inline void
     jsonSchemaIndexGet(App& app, const crow::Request& req,
                        const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
@@ -138,6 +161,9 @@
     // Note, this route must always be registered last
     BMCWEB_ROUTE(app, "/redfish/<path>")
         .notFound()(std::bind_front(redfish404, std::ref(app)));
+
+    BMCWEB_ROUTE(app, "/redfish/<path>")
+        .methodNotAllowed()(std::bind_front(redfish405, std::ref(app)));
 }
 
 } // namespace redfish
diff --git a/redfish-core/src/error_messages.cpp b/redfish-core/src/error_messages.cpp
index c6d27a9..6068905 100644
--- a/redfish-core/src/error_messages.cpp
+++ b/redfish-core/src/error_messages.cpp
@@ -309,7 +309,7 @@
 
 void resourceCannotBeDeleted(crow::Response& res)
 {
-    res.result(boost::beast::http::status::forbidden);
+    res.result(boost::beast::http::status::method_not_allowed);
     addMessageToErrorJson(res.jsonValue, resourceCannotBeDeleted());
 }
 
@@ -1673,13 +1673,6 @@
     messages::addMessageToJsonRoot(res.jsonValue, passwordChangeRequired(arg1));
 }
 
-void invalidUpload(crow::Response& res, std::string_view arg1,
-                   std::string_view arg2)
-{
-    res.result(boost::beast::http::status::bad_request);
-    addMessageToErrorJson(res.jsonValue, invalidUpload(arg1, arg2));
-}
-
 /**
  * @internal
  * @brief Formats InsufficientStorage message into JSON
@@ -1700,6 +1693,31 @@
 
 /**
  * @internal
+ * @brief Formats OperationNotAllowed message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json operationNotAllowed()
+{
+    return getLog(redfish::registries::base::Index::operationNotAllowed, {});
+}
+
+void operationNotAllowed(crow::Response& res)
+{
+    res.result(boost::beast::http::status::method_not_allowed);
+    addMessageToErrorJson(res.jsonValue, operationNotAllowed());
+}
+
+void invalidUpload(crow::Response& res, std::string_view arg1,
+                   std::string_view arg2)
+{
+    res.result(boost::beast::http::status::bad_request);
+    addMessageToErrorJson(res.jsonValue, invalidUpload(arg1, arg2));
+}
+
+/**
+ * @internal
  * @brief Formats Invalid File message into JSON
  *
  * See header file for more information
