Getting Absolute URL fron an ASP.NET MVC Action

后端 未结 7 609
北恋
北恋 2020-12-07 19:37

This probably is a dummy question but I cannot find a clear indication. I have a POCO class in a MVC3 web application whose only purpose is managing the backup of some files

7条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-07 20:32

    You can do it by the following:

    var urlBuilder =
        new System.UriBuilder(Request.Url.AbsoluteUri)
            {
                Path = Url.Action("Action", "Controller"),
                Query = null,
            };
    
    Uri uri = urlBuilder.Uri;
    string url = urlBuilder.ToString();
    // or urlBuilder.Uri.ToString()
    

    Instead of Url.Action() in this sample, you can also use Url.Content(), or any routing method, or really just pass a path.

    But if the URL does go to a Controller Action, there is a more compact way:

    var contactUsUriString =
        Url.Action("Contact-Us", "About",
                   routeValues: null /* specify if needed */,
                   protocol: Request.Url.Scheme /* This is the trick */);
    

    The trick here is that once you specify the protocol/scheme when calling any routing method, you get an absolute URL. I recommend this one when possible, but you also have the more generic way in the first example in case you need it.

    I have blogged about it in details here:
    http://gurustop.net/blog/2012/03/23/writing-absolute-urls-to-other-actions-in-asp-net-mvc/

    Extracted from Meligy’s AngularJS & Web Dev Goodies Newsletter

提交回复
热议问题