Hi Corneliu,
Yes, I had thought about constructing it based on the host, the protocol, and the action requirements. However, if the app was installed in a virtual directory below the root of the site, I’m presuming that wouldn’t work. Regards, Greg Dr Greg Low 1300SQLSQL (1300 775 775) office | +61 419201410 mobile│ +61 3 8676 4913 fax SQL Down Under | Web: <http://www.sqldownunder.com/> www.sqldownunder.com From: [email protected] [mailto:[email protected]] On Behalf Of Corneliu I. Tusnea Sent: Friday, 12 April 2013 10:02 PM To: ozDotNet Subject: Re: MVC4 URLs Greg, Instead of using the AbsolutUri and changing it look at the HttpContext.Requst.Url.Host and add the Url.Action. However I'd strongly recommend you look at HttpContext.Request.Headers["host"] and take the part before the ":" just in case your side responds to various host names. Eg.. subdomain1.site.com <http://subdomain1.site.com> and subdomain2.site.com <http://subdomain2.site.com> I'm sure you can push that into a nice extension method like Tony's one. Regards, Corneliu. On Fri, Apr 12, 2013 at 9:26 PM, Tony McGee <[email protected] <mailto:[email protected]> > wrote: A problem with using string replace is that if your absolute path is "/" (site root /Home/Index), the URI gets mangled, i.e. http:www.example.com/SomeController/SomeAction <http://www.example.com/SomeController/SomeAction> I'd be tempted to create an extension method on UrlHelper to hide some of the ugliness: public static class UrlHelperExtensions { public static string AbsoluteAction(this UrlHelper helper, string actionName, string controllerName) { string absUri = helper.RequestContext.HttpContext.Request.Url.AbsoluteUri; string urlPath = helper.RequestContext.HttpContext.Request.Url.PathAndQuery; return absUri.Substring(0, absUri.Length - urlPath.Length) + helper.Action(actionName, controllerName); } } then in your controller: string returnURI = Url.AbsoluteAction("SomeAction","SomeController"); On 12/04/2013 18:51, Greg Low (GregLow.com) wrote: Hi Nathan/Dave, This seems to work but seems ugly: string returnURI = HttpContext.Request.Url.AbsoluteUri.Replace(HttpContext.Request.Url.AbsolutePath,"") + Url.Action("SomeAction", "SomeController"); I need to generate it based on where the site is deployed but it needs to be a full URL as it’s passed to a callback function on another site. Regards, Greg Dr Greg Low 1300SQLSQL (1300 775 775) office | +61 419201410 mobile│ +61 3 8676 4913 <tel:%2B61%203%208676%204913> fax SQL Down Under | Web: <http://www.sqldownunder.com/> www.sqldownunder.com From: [email protected] <mailto:[email protected]> [mailto:[email protected]] On Behalf Of Dave Walker Sent: Friday, 12 April 2013 5:43 PM To: ozDotNet Subject: Re: MVC4 URLs We use a helper extension method to wrap as have configurable cdn esp. for images and other static resources. Was the only way we found we could do it. Extra complexity for us is we wrap a SquishIt bundle up as well to turn on/off minification and combination of files. On 12 Apr 2013, at 08:32, Nathan Schultz <[email protected] <mailto:[email protected]> > wrote: Instead of using Url.Action, couldn't you just write your own <a href>? On 12 April 2013 11:17, Greg Low (GregLow.com <http://GregLow.com> ) <[email protected] <mailto:[email protected]> > wrote: Hi Folks, In MVC4, in the code for a controller, what’s the best way to calculate the fully qualified URL for a particular action? Eg: If I use Url.Action(“SomeAction”,”SomeController”) The intellisense for Action says “gets a fully qualified URL”. However what I get back is: /SomeController/SomeAction What I want is: http://www.whateversiteIhit.com/SomeController/SomeAction <http://www.somesite.com/SomeController/SomeAction> As I need to pass it to an external callback. What’s the best way to do that? Regards, Greg Dr Greg Low CEO and Principal Mentor SQL Down Under SQL Server MVP and Microsoft Regional Director 1300SQLSQL (1300 775 775) office | <tel:%2B61%20419201410> +61 419201410 mobile│ <tel:%2B61%203%208676%204913> +61 3 8676 4913 fax Web: <http://www.sqldownunder.com/> www.sqldownunder.com
