diff --git a/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs b/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs index 90f764a57..a33b93e40 100644 --- a/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs +++ b/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; +using System.Web.Hosting; using Orchard.CmsPages.ViewModels; using Orchard.Logging; using Orchard.XmlRpc; @@ -20,12 +21,16 @@ namespace Orchard.CmsPages.Services { public ILogger Logger { get; set; } public void Process(XmlRpcContext context) { + var uriBuilder = new UriBuilder(context.HttpContext.Request.Url); + uriBuilder.Path = context.HttpContext.Request.ApplicationPath; + uriBuilder.Query = string.Empty; + if (context.Request.MethodName == "blogger.getUsersBlogs") { context.Response = new XRpcMethodResponse() .Add(new XRpcArray() .Add(new XRpcStruct() - .Set("url", "http://localhost:40245/") + .Set("url", uriBuilder.Uri.AbsoluteUri) .Set("blogid", "Orchard.CmsPages") .Set("blogName", "Orchard Pages"))); } @@ -61,6 +66,7 @@ namespace Orchard.CmsPages.Services { if (context.Request.MethodName == "metaWeblog.newMediaObject") { var result = MetaWeblogNewMediaObject( + uriBuilder, Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), @@ -140,6 +146,7 @@ namespace Orchard.CmsPages.Services { } private XRpcStruct MetaWeblogNewMediaObject( + UriBuilder uriBuilder, string blogId, string user, string password, @@ -147,13 +154,14 @@ namespace Orchard.CmsPages.Services { var name = file.Optional("name"); var bits = file.Optional("bits"); - var target = HttpContext.Current.Server.MapPath("~/Files/"+name); + var target = HttpContext.Current.Server.MapPath("~/Files/" + name); Directory.CreateDirectory(Path.GetDirectoryName(target)); using (var stream = new FileStream(target, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) { stream.Write(bits, 0, bits.Length); } - return new XRpcStruct().Set("url", "http://localhost:40245/Files/" + name); + uriBuilder.Path = uriBuilder.Path.TrimEnd('/') + "/Files/" + name.TrimStart('/'); + return new XRpcStruct().Set("url", uriBuilder.Uri.AbsoluteUri); } } } diff --git a/src/Orchard.Web/Packages/Orchard.XmlRpc/Controllers/HomeController.cs b/src/Orchard.Web/Packages/Orchard.XmlRpc/Controllers/HomeController.cs index 00a50d579..0c8e069fd 100644 --- a/src/Orchard.Web/Packages/Orchard.XmlRpc/Controllers/HomeController.cs +++ b/src/Orchard.Web/Packages/Orchard.XmlRpc/Controllers/HomeController.cs @@ -41,7 +41,7 @@ namespace Orchard.XmlRpc.Controllers { } private XRpcMethodResponse Dispatch(XRpcMethodCall request) { - var context = new XmlRpcContext { Request = request }; + var context = new XmlRpcContext { HttpContext = HttpContext, Request = request }; foreach (var handler in _xmlRpcHandlers) handler.Process(context); return context.Response; diff --git a/src/Orchard.Web/Packages/Orchard.XmlRpc/XmlRpcContext.cs b/src/Orchard.Web/Packages/Orchard.XmlRpc/XmlRpcContext.cs index ea517c1e3..16397f15e 100644 --- a/src/Orchard.Web/Packages/Orchard.XmlRpc/XmlRpcContext.cs +++ b/src/Orchard.Web/Packages/Orchard.XmlRpc/XmlRpcContext.cs @@ -1,7 +1,9 @@ +using System.Web; using Orchard.XmlRpc.Models; namespace Orchard.XmlRpc { public class XmlRpcContext { + public HttpContextBase HttpContext { get; set; } public XRpcMethodCall Request { get; set; } public XRpcMethodResponse Response { get; set; } }