diff --git a/src/SenseNet.Client.Tests/UnitTests/ODataRequestTests.cs b/src/SenseNet.Client.Tests/UnitTests/ODataRequestTests.cs index 515f30e..e1e2f24 100644 --- a/src/SenseNet.Client.Tests/UnitTests/ODataRequestTests.cs +++ b/src/SenseNet.Client.Tests/UnitTests/ODataRequestTests.cs @@ -1254,6 +1254,34 @@ public void ActionRequest_NoOperation() #endregion + #region Bug fixes + + [TestMethod] + public void ODataRequest_ToString_FIX_152_DuplicatedSlash() + { + var url = "https://example.com"; + + var server = new ServerContext { Url = url }; + var request = new ODataRequest(server) { Path = "/Root/Content", ActionName = "Action1" }; + Assert.AreEqual("https://example.com/OData.svc/Root('Content')/Action1?metadata=no", request.ToString()); + + server = new ServerContext { Url = url }; + request = new ODataRequest(server) { ContentId = 42, ActionName = "Action1" }; + Assert.AreEqual("https://example.com/OData.svc/content(42)/Action1?metadata=no", request.ToString()); + + url = "https://example.com/"; + + server = new ServerContext { Url = url }; + request = new ODataRequest(server) { Path = "/Root/Content", ActionName = "Action1" }; + Assert.AreEqual("https://example.com/OData.svc/Root('Content')/Action1?metadata=no", request.ToString()); + + server = new ServerContext { Url = url }; + request = new ODataRequest(server) { ContentId = 42, ActionName = "Action1" }; + Assert.AreEqual("https://example.com/OData.svc/content(42)/Action1?metadata=no", request.ToString()); + } + + #endregion + //#region LoadReferenceRequest_* [TestMethod] diff --git a/src/SenseNet.Client/ODataRequest.cs b/src/SenseNet.Client/ODataRequest.cs index 7d00d9c..d6c6529 100644 --- a/src/SenseNet.Client/ODataRequest.cs +++ b/src/SenseNet.Client/ODataRequest.cs @@ -447,7 +447,7 @@ private string GetItemUrlBase() { // short url format that contains only the id if (ContentId > 0) - return $"{SiteUrl}/{SERVICE_NAME}/content({ContentId})"; + return $"{SiteUrl.TrimEnd('/')}/{SERVICE_NAME}/content({ContentId})"; // regular url that contains the content path var path = Path.TrimStart('/');