7
votes

ASP.NET MVC SEO URL

Mon objectif est d'avoir le routage de l'URL comme suit: xxx

Quel est le moyen le plus simple d'y parvenir sans placer le nom du contrôleur un nom de fonction dans l'URL ci-dessus? Si la page ci-dessus non trouvée, je devrais rediriger vers 404 page.

Addon 1: Cette page Is-Peter et cette page IS-John n'est pas du contenu statique, mais provient de la base de données.


1 commentaires

Est "cette-IS-PETER-Page" une page statique ou une dynamique où "cette-IS-PETER-Page" serait un champ dans une base de données?


3 Réponses :


4
votes

Personnellement, je ne suggérerais pas un itinéraire comme celui-là, mais si cela répond à vos besoins, vous devez faire quelque chose comme:

avoir la route suivante dans votre fichier global.asax: xxx

Ensuite, dans votre "PersonnelPagecontroller", avez la méthode suivante: xxx

Assurez-vous de disposer de la vue appropriée: "Peterview", "JohnView" et " Notfound "dans vos vues / packagePage / .


4 commentaires

Vous pouvez combiner cela avec une contrainte d'itinéraire pour empêcher les demandes «indésirables» d'aller à ce contrôleur. (Je suppose que vous avez toujours besoin d'un autre contrôleur)


Comment empêcher la demande «indésirable»?


@ERVIN TER, vous pouvez fournir des contraintes de route qui contraindront cet itinéraire à une expression régulière particulière.


@Simucal, je vois. Je ne sais jamais que nous pouvons planter une expression régulière sur la route.



2
votes

Je ne pense pas que cela puisse être fait. AFAIK ASP.NET MVC reconnaît les paramètres de routage via le caractère "/".

Votre format, d'autre part, passe par "{contrôleur} -is- {id} - {action}" - il n'y a donc aucune façon que le contrôleur puisse se distinguer de l'ID et de l'action. P >

Je pense que utiliser des caractères "/" n'affecte ni dégrade de référencement; Il n'affecte que la lisibilité humaine et la rétention de l'URL. P>

Quoi qu'il en soit, l'URL suivante est possible: http://www.abc.com/this-is-the-page-of/peter Code> En ajoutant un autre itinéraire dans la méthode GLOBAL.ASAX CODE> RegisterRoutes: P>

        routes.MapRoute(
            "AnotherRoute",
            "this-is-the-page-of/{id}",
            new { controller = "PersonalPage", action = "Details", id = "" }
        );


0 commentaires

9
votes

Semblable à la mise en œuvre de Kingnestor, vous pouvez également faire les suivants qui faciliteront votre travail:

1) Écrivez votre modèle P>

public ActionResult Index([ModelBinder(typeof(CustomBinder))] MyUser usr)
{
    ViewData["Welcome"] = "Viewing " + usr.Username;
    return View();
}


2 commentaires

Merci à Zhaphe pour réorganiser les étapes 3 et 4


J'ai trouvé BindingContext ne contenant pas httpcontext