Bob
Bob

Reputation: 99774

Control.ResolveUrl versus Control.ResolveClientUrl versus VirtualPathUtility.ToAbsolute

Is there any benifit to using one of these methods over the other when resolving paths which start with the tilde (~)?

Generally, what is a better practice, should you be sending relative paths or absolute paths down in your html?

Upvotes: 25

Views: 9536

Answers (4)

Aaron Hoffman
Aaron Hoffman

Reputation: 6962

The difference between ResolveUrl and ResolveClientUrl is that ResolveClientUrl returns a path relative to the current page, ResolveUrl returns a path relative to the site root:

http://www.andornot.com/blog/post/ResolveUrl-vs-ResolveClientUrl.aspx

I would recommend using absolute paths.

Edit: Rick Strahl posted a nice article about this

Edit2: Removed bit about caching. Does not add to the answer and may not necessarily be accurate.

http://west-wind.com/weblog/posts/132081.aspx

Upvotes: 26

ravi
ravi

Reputation: 1019

Another difference I noticed:

Code:

string value = "~/Docs/Hello & World.aspx"; Response.Write(HyperLink1.ResolveClientUrl(value) + "<br/>"); Response.Write(HyperLink1.ResolveUrl(value) + "<br/>");

Result:

Docs/Hello%20&%20World.aspx

/Docs/Hello & World.aspx

Upvotes: 1

Daniel Ballinger
Daniel Ballinger

Reputation: 13537

Note that VirtualPathUtility.ToAbsolute(virtualPath) will throw an exception if a query string is included in the path.

The HttpException message will be along the lines of "'~/YourVirtualPath/YourPage.aspx?YourQueryStringArg=FooBar' is not a valid virtual path."

See Rick Strahl's Web Log:ResolveUrl() without Page and MSDN: VirtualPathUtility.ToAbsolute Method (String)

Upvotes: 4

Rohit Agarwal
Rohit Agarwal

Reputation: 4289

Here's another article that explains the difference between the various ways to resolving paths in ASP.NET -

Different approaches for resolving URLs in ASP.NET

Upvotes: 5

Related Questions