Keith L.
Keith L.

Reputation: 2124

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.

Upvotes: 2

Views: 6506

Answers (3)

Grant Thomas
Grant Thomas

Reputation: 45083

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.

Upvotes: 2

user1105802
user1105802

Reputation:

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 :)

Upvotes: 1

Darin Dimitrov
Darin Dimitrov

Reputation: 1038770

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))
)

Upvotes: 7

Related Questions