You cannot remove the id. If you remove it from the route there's no longer any way to pass it to the server. Where do you think it will come from? What you could do is have the following SEO friendly url pattern:
http://www.abc.com/US/1111-11/abcd
Exactly as StackOverflow does it with questions. Look at the address bar and you will see:
https://stackoverflow.com/questions/15378465/how-to-hide-parameter-in-url-using-routing-in-mvc-2
You have the id and the name.
In order to achieve that you could have the following route definition:
routes.MapRoute(
name: "ResultsRoute",
url: "us/{id}/{name}",
defaults: new { controller = "Search", action = "Results" }
);
The next problem you might encounter is if the names contain some special characters. Scott Hanselman explained this in details in his blog post
. The proper way to solve that is remove all dangerous characters from the name. Here's for example the filtering function
that StackOverflow uses. So the idea is to pass the name through this filtering function and generate a so called slug which is SEO friendly but is not needed in your controller action because you already have the corresponding id:
public ActionResult Results(int id)
{
...
}