How do I get the complete virtual path of an ASP.NET application

前端 未结 6 429
别跟我提以往
别跟我提以往 2021-01-31 08:52

How do I know the the complete virtual path that my application is currently hosted? For example:

http://www.mysite.com/myApp

or



        
相关标签:
6条回答
  • 2021-01-31 09:04

    Url.Content("~") worked great for me and is nice and simple. I used it in the view like this:

    <a href="@(Url.Content("~" + attachment))">
    

    Here my attachment is a path like "/Content/Documents/Blah.PDF".

    When my app is published to a IIS site that uses a virtual directory, Url.Content("~") resolves to just the virtual directory name like, "/app-test", for example.

    0 讨论(0)
  • 2021-01-31 09:11

    The below code will solve the purpose, however you have to do a bit tuning for two types of scenarios:

    1. Hosted as separate web application.
    2. Hosted as Virtual application within a web application.

      HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath;

    0 讨论(0)
  • 2021-01-31 09:22

    The domain name part of the path is not really a property of the application itself, but depends on the requesting URL. You might be able to reach a single Web site from many different host names. To get the domain name associated with the current request, along with the virtual path of the current application, you could do:

    Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
    

    Technically, an "application" is a virtual directory defined in IIS and Request.ApplicationPath returns exactly that. If you want to get the folder in which the current request is handled, you can do this:

    VirtualPathUtility.GetDirectory(Request.Path)
    

    ASP.NET has no idea how to distinguish your sub-application from a bigger application if it's not defined as a virtual directory in IIS. Without registering in IIS, it just sees the whole thing as a single app.

    0 讨论(0)
  • 2021-01-31 09:23
    Request.Url
    

    it contains several points that you might consider to use, see the image below:

    enter image description here

    0 讨论(0)
  • 2021-01-31 09:23

    Try this (Haven't tried it)

    public string GetVirtualPath(string physicalPath)
    {
    string rootpath = Server.MapPath("~/");
    physicalPath = physicalPath.Replace(rootpath, "");
    physicalPath = physicalPath.Replace("\\", "/");
    return "~/" + physicalPath;
    }
    

    Link 1

    Link 2

    0 讨论(0)
  • 2021-01-31 09:28

    In .NET 4.5

        VirtualPathUtility.ToAppRelative(path)
    
    0 讨论(0)
提交回复
热议问题