简体   繁体   中英

VB.net / asp.net: Get URL without filename

i want to set a link in VB.net dynamically to a file. My url looks like that:

http://server/folder/folder2/file.aspx?get=param

I tried to use Request.URL but i have not found any solution to get only

http://server/folder/folder2/

without the query string and without the filename.

Please help.

Dim url = Request.Url;
Dim result = String.Format(
    "{0}{1}", 
    url.GetLeftPart(UriPartial.Authority),
    String.Join(string.Empty, url.Segments.Take(url.Segments.Length - 1))
)

You can easily get a relative file path using the Request instance, then work with that, using Path class ought to help:

Dim relativePath = Request.AppRelativeCurrentExecutionFilePath
Dim relativeDirectoryPath = System.IO.Path.GetDirectoryName(relativePath)

It's worth noting that GetDirectoryName might transform your slashes, so you could expand the path:

Dim mappedPath = HttpContext.Current.Server.MapPath(newpath)

So, to remove redundancy, we could shorten this:

Dim path = _ 
    Server.MapPath( _ 
        Path.GetDirectoryName( _ 
            Request.AppRelativeCurrentExecutionFilePath)))

But you'll need to check for possible exceptions.

You can use Uri.Host to get the computer name and then Uri.Segments (an array) to get everything up to the filename, for example:

var fileName = Uri.Host && Uri.Segments(0) && Uri.Segments(1)

This will give you: server/folder/folder2

If you have a variable number of segments, you can iterate over them and ignore the last one.

I hope that might help :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM