Asp.Net MVC Routing: ¿cómo puedo hacer coincidir la URL completa?

Estoy tratando de crear una ruta de captura para rastrear cuando una cadena de afiliados está en la URL. Un código de affilite está marcado por unx seguido de uninty solo aparecerá al final de una URL (pero antes de la cadena de consulta).

La idea es que extraeré el ID de afiliado, haré un registro y luego haré un 301 para la misma solicitud sin el ID de afiliado.

Por ejemplo:

http://www.domain.com/x32
http://www.domain.com/x32/
http://www.domain.com/path/to/something/x32
http://www.domain.com/x32?query=string
http://www.domain.com/x32/?query=string
http://www.domain.com/path/to/something/x32?query=string
http://www.domain.com/path/to/something/x32/?query=string

Tengo esta ruta

routes.Add(new Route("{url}/x{affiliateExternalId}", new MvcRouteHandler())
{
     Defaults = new RouteValueDictionary(
      new { controller = "Home", action = "LogCookieAndRedirect" }
     ),
     Constraints = new RouteValueDictionary(new { affiliateExternalId = @"\d{1,6}" })
});

Que solo coincide

http://www.domain.com/path/x32
http://www.domain.com/path/x32/

¿Qué debo hacer para hacer coincidir todo y pasar la cadena de consulta al controlador? Hay un* operador que sospecho que debería usar, pero no puedo hacer que haga lo que necesito.

Respuestas a la pregunta(3)

Su respuesta a la pregunta