www.somedomain.com
es el dominio / host. El subdominio es una parte importante. www.
a menudo se usa indistintamente con no tener uno, pero eso debe configurarse como una regla (incluso si está configurado de forma predeterminada) porque no son equivalentes. Piense en otro subdominio, como mx.
. Probablemente tenga un objetivo diferente al www.
.
Teniendo en cuenta eso, aconsejaría no hacer este tipo de cosas. Dicho esto, ya que estás preguntando, imagino que tienes una buena razón.
Personalmente, sugeriría una carcasa especial www.
para esto.
string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);;
if (host.StartsWith("www."))
return host.Substring(4);
else
return host;
De lo contrario, si está realmente 100% seguro de que desea eliminar cualquier subdominio, necesitará algo un poco más complicado.
string host = ...;
int lastDot = host.LastIndexOf('.');
int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.');
if (secondToLastDot > -1)
return host.Substring(secondToLastDot + 1);
else
return host;
Conseguir el puerto es como han dicho otras personas.