Domanda

Se si esamina un URL domanda così si vedrà che un ID e una "slug" vengono passate al controller Domande: https://stackoverflow.com/questions/676934/what-do-you-need-to-write-your-own-blog-engine . Quello che trovo interessante è che si può modificare la parte "slug" dell'URL senza compromettere la capacità dell'applicazione per inoltrare la richiesta di esempio . L'unico modo che ho potuto pensare a tirare fuori questo è avere un percorso che ha accettato un ID e una "slug" e ha utilizzato un vincolo percorso sulla lumaca per assicurarsi che ha seguito un modello. Ho dovuto usare un vincolo per assicurare che avere le due variabili non ha portato a questo percorso corrispondenza tutte le richieste. Qualcuno ha un modo migliore per ottenere questo risultato, o qualsiasi esempi di scenari di routing più avanzato?

AGGIUNTA:

Mi rendo conto che la lumaca è per leggibiltà umana, e vorrei duplicare questa funzionalità in un'altra applicazione. Qual è il modo migliore per raggiungere questo obiettivo.

Percorso:

routes.MapRoute(
    "Id + Slug",          // Route name
    "Test/{id}/{slug}",   // URL with parameters
    new                   // Parameter defaults
    {
        controller = "Test", 
        action = "Details", 
        id = "", 
        slug = "" 
    },  
    new { slug = new SlugConstraint() }
);

Constraint semplice:

public class SlugConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext,
        Route route,
        string parameterName,
        RouteValueDictionary values,
        RouteDirection routeDirection)
    {
        string value = values[parameterName].ToString();

        return value.Contains("-");
    }
}
È stato utile?

Soluzione

questo quello che stai cercando ... non definisce la lumaca alla fine.

Altri suggerimenti

Non è necessario utilizzare la lumaca a tutti. Probabilmente è lì solo per la leggibilità umana e l'ottimizzazione dei motori di ricerca. È possibile ignorare quando il routing e solo di lavoro fino alla ID.

Per esempio, clicca qui:

Stack Overflow Domanda Routing

La lumaca è lì per i motori di ricerca per catalogare la risorsa / pagina. Non è usato nel percorso a tutti come parte degli argomenti passati al database per recuperare il posto richiesto.

L'ID è la parte importante.

Quindi, nel codice, lo SlugConstraint non è richiesto e il valore dell'argomento slug viene ignorato nell'azione Dettagli.

Questo comportamento è ciò in modo da fare e che cosa si può fare, se u vogliono copiare SO.

Il "percorso" può essere qualsiasi cosa il router può essere configurato per gestire. Le parti dinamiche del "percorso" sono poi passati alla pagina di destinazione / target e recuperati tramite il metodo RouteValue () (in ASP.NET Routing). Quello che fai con quei valori sulla pagina di destinazione è interamente a voi. Usali o ignorarli.

Così l'ID (nel tuo esempio) è la chiave e il resto (la lumaca) è lì solo per la leggibilità umana e SEO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top