L'ordine del tuo itinerario è importante. Quindi creare una prima definizione di percorso che gestisca tutti i controller disponibili e quindi menzionarne una che gestirà il resto delle richieste. Vi si possono gestire il www.yousite.com/apple
tipo di richiesta
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" },
new { controller = new FromValuesListConstraint("Home", "Account","OtherOne") }
);
// to handle personalize user url
routes.MapRoute("user","{url}", new {controller="Home",action="Profile",url = "" });
Ora creare una nuova classe chiamata FromValuesListContraint
che eredita da IRouteConstraint
public class FromValuesListConstraint : IRouteConstraint
{
private string[] _values;
public FromValuesListConstraint(params string[] values)
{
this._values = values;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName,
RouteValueDictionary values, RouteDirection routeDirection)
{
// Get the value called "parameterName" from the
// RouteValueDictionary called "value"
string value = values[parameterName].ToString();
// Return true is the list of allowed values contains
// this value.
for (int i = 0; i < _values.Length; i++)
if (SContains(_values[i], value, StringComparison.OrdinalIgnoreCase))
return true;
return false;
}
public bool SContains(string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}
}
Avere il vostro metodo di azione Profile
Home leggere il valore del parametro e ottenere i dati dal vostro Banca dati.
public ActionResult Profile(string url)
{
//url variable will have apple or microsoft . You may get data from db and return a view now.
}
Così ogni volta che arriva una richiesta, controllerà se è un controller disponibile (che è stato passato nel costruttore della classe FromValuesListContraint nella tua prima definizione della rotta), se disponibili, andrà per quella instradamento, altrimenti, andrà per la rotta generale (predefinita) menzionata come seconda rotta.
In questo esempio, Home, Account e OtherOnes sono i miei controller disponibili. ogni volta che aggiungi un nuovo controller al tuo progetto, devi aggiungerlo al constrctor del costruttore della classe FromValuesListConstraint.
Semplicemente dicendo che funziona come Cattura alcune eccezioni specifiche e andando all'eccezione generale se nessuna di esse viene catturata! :) (solo un esempio da capire)
non sembra possibile, dal momento che non è possibile dire www.example.com/apple da www.esempio.com/login se prima è un ID marchio e il secondo è il Controller nome. A meno che non si scriva il proprio provider di routing personalizzato e si controlli se tale parte deve essere di marca o nome del controller.Ma sarebbe troppo complicato per la maggior parte dei casi per un router ... – xandy