The other day I was trying to pass an encoded version of id=123 to a customer's search API.  I tried

var result = HttpUtility.HtmlEncode("id=123");

but it returned id=123.  I stared at the screen, scratched my head, and jumped on Google.

A quick search reminded me that HtmlEncode is for escaping HTML, but it leaves everything else alone.  So

var result = HttpUtility.HtmlEncode("<br/>");

returns <br/>.  All the less thans and greater thans get escaped, but the rest is pretty much the same.

UrlEncode is for cases where you want to escape a URL, so

var result = HttpUtility.UrlEncode("id=123");

returns id%3d123, which is what I wanted in the first place.  By comparison, if you UrlEncode the <br/> tag, like

var result = HttpUtility.UrlEncode("<br/>");

you'll get back %3cbr%2f%3e.  It's encoding the less than, the slash, and the greater than, but it's encoding them with URL-type escapes instead of HTML-style ones.

I guess it's been a while since I paid attention to encoding.  Not all encoding methods are equal in the ASP.NET framework, so be careful which one you use.