Ihre Routenbestellung ist wichtig. Erstellen Sie also eine erste Routendefinition, die alle verfügbaren Controller behandelt, und geben Sie dann eine an, die die restlichen Anfragen behandelt. Dort finden Sie die www.yousite.com/apple
Art der Anfrage
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 = "" });
nun eine neue Klasse FromValuesListContraint
, die von 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;
}
}
Profile
Aktionsmethode in Heim den Parameterwert lesen und erhalten Daten erben genannt erstellen Griff Haben Sie Ihre von Ihrem Datenbank. So
public ActionResult Profile(string url)
{
//url variable will have apple or microsoft . You may get data from db and return a view now.
}
, wenn eine Anfrage kommt, wird sie prüfen, ob es sich um eine Steuerung zur Verfügung steht (die Sie in die FromValuesListContraint Klasse Konstruktor übergeben in Ihrer ersten Route Definition), wenn vorhanden, dann wird es für das Routing gehen, sonst, es wird für die allgemeine (Standard) Route gehen, die als zweite Route erwähnt wird.
In diesem Beispiel sind Home, Account und OtherOnes meine verfügbaren Controller. Wenn Sie Ihrem Projekt einen neuen Controller hinzufügen, möchten Sie diesen zum Konstruktor des FromValuesListConstraint-Klassenkonstruktors hinzufügen.
Einfach gesagt es funktioniert wie Catching eine bestimmte Ausnahme und die allgemeine Ausnahme, wenn keine von ihnen gefangen werden! :) (nur ein Beispiel zu verstehen)
scheint nicht möglich, da Sie www.example.com/apple von www.example.com/login nicht unterscheiden können, ob zuerst eine Marken-ID und zweitens der Controller ist Name. Es sei denn, Sie schreiben Ihren eigenen benutzerdefinierten Routing-Provider und überprüfen, ob dieser Teil Marken- oder Controllername sein sollte.Aber das wäre in den meisten Fällen für einen Router zu kompliziert ... – xandy