Frage

Ich bin ein bisschen auf die Gestaltung meiner SEO-freundliche URLs für mvc stecken .... Nehmen Sie zum Beispiel die folgende URL ein: http: //myapp/venues/resturants.aspx location = central & orderBy = top- bewertet

Mit meiner MVC-app ich habe es wie folgt abgebildet: http: // myapp / Veranstaltungsorte / Liste / resturants / zentral / top-rated
{Controller} / {Aktion} / {Kategorie} / {Lage} / {um}

Jetzt ist das einzige Problem ist, dass Lage und Ordnung sind optional ... so sollte es möglich sein eine Anfrage wie einreichen: http: // myapp / Veranstaltungsorte / Liste / resturants / top-rated . Dies beweist, um ein Problem zu sein, wenn die Anforderung die Controller-Aktion trifft, hat der Lageparameter „top-rated“ aufgenommen, natürlich.

Irgendwelche Vorschläge? Ich bin am überlegen explizite querystrings mit mehr als einem Parameter zu behandeln, aber das ist wirklich meine letzte Option, da ich möchte nicht zu viel SEO opfern.

Hat jemand Éles in solche Dilemmas laufen? Und wie Sie damit umgegangen?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Unter der Annahme, dass die zulässigen Werte für die Lage und Reihenfolge eindeutig sind (dh, wenn sie hereinkommen, Sie sagen, sie auseinander, oder sonst, wenn sie nur einen liefern, wie wollen Sie wissen, ob es einen Ort oder eine Bestellung ist?) , dann könnte man nur zwei Parameter nehmen und herausfinden, was sie in der Steuerung sind.

Route: {controller}/{action}/{param1}/{param2}

Controller Aktion:

public ActionResult MyAction(string param1, string param2)
{
    string location;
    string order;
    if (!ParseLocation(param1, out location))
    { ParseLocation(param2, out location); }
    // ...
}

Nicht besonders elegant, aber nicht lassen Sie die URLs, die Sie wollen.

Andere Tipps

Klicken Sie auf Profil Link und schauen Sie sich die URLs für Statistik, Neu, Antwort, etc.

Beispiele:

ohne Art wird standardmäßig Statistiken

Optional paramters sollte Abfrageparameter

sein

Sie werden immer dieses Problem haben, wenn Sie mehrere optionale Parameter haben. Entweder macht eine oder beide nicht-optional (und früher in dem Query-String als die optional ein positioniert) oder verwenden Sie die Abfragezeichenfolgeflag Parameter Notation.

ok Jungs nur eine Lösung Entsendung i mit bisher habe zu spielen.

Ich habe meine Wege mit Einschränkungen wie folgt festgelegt:

        routes.MapRoute(
            "VenuesList",                                              
            "venues/list/{category}/{location}/{orderBy}",             
            new { controller = "venues", action = "list", category = "", location = "", orderBy = "" },
            new { location = "central|east|west|south", orderBy = "top-rated|price" }
        );

    routes.MapRoute(
            "VenuesListByLocation",                                              
            "venues/list/{category}/{location}",                           
            new { controller = "venues", action = "list", category = "", location = "" },
            new { location = "central|east|west|south" }
        );

        routes.MapRoute(
            "VenuesListByOrder",                                              
            "venues/list/{category}/{orderBy}",                           
            new { controller = "venues", action = "list", category = "", orderBy = "" },
            new { orderBy = "top-rated|price" }
        );

        routes.MapRoute(
            "VenuesListDefault",                                              
            "venues/list/{category}",                           
            new { controller = "venues", action = "list", category = "" }

        );

        routes.MapRoute(
            "Default",                                              
            "{controller}/{action}/{id}",                           
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        ); 

Die Idee ist, dass, wenn die Validierung fehlschlägt es auf die nächste Route in der Liste gehen ... schließlich den Standard schlagen.

Benötigt etwas mehr Tests aber hat gut funktioniert so weit ...

Warum nicht eine Eigenschaft auf der Seite für jede mögliche Abfragezeichenfolgeflag Parameter erstellen?

Auf diese Weise können Sie es jede mögliche Weise behandeln Sie mit nur wenigen Zeilen Code wählen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top