ASP.Net MVC 4 w/ AttributeRouting et plusieurs RoutePrefix attributs

TL;DR

J'ai besoin d'un moyen de programtically choisir RoutePrefix est choisi lors de la génération d'Url basé sur les propriétés d'un utilisateur de mon application MVC

Pas TL;DR

J'ai un MVC 4 app (avec le AttributeRouting package NuGet)

En raison des exigences de l'environnement d'hébergement-je avoir deux itinéraires pour beaucoup de mes actions, de sorte que l'environnement d'hébergement peut avoir différentes autorisations d'accès.

Je suis la résolution de ce par la décoration de mon contrôleur avec [RoutePrefix("full")] [RoutePrefix("lite)]. ce qui permet à chaque méthode d'action pour être accessible par l'intermédiaire de /plein de/{action} et /lite/{action}.

Cela fonctionne parfaitement.

[RoutePrefix("full")]
[RoutePrefix("lite")]
public class ResultsController : BaseController
{
    //Can be accessed via /full/results/your-results and /lite/results/your-results and 
    [Route("results/your-results")]              
    public async Task<ActionResult> All()
    {
    }

}

Toutefois, chaque utilisateur ne doit utiliser soit complet ou lite dans leur url, ce qui est déterminé par certaines propriétés de l'utilisateur.

Évidemment, quand j'utilise RedirectToAction() ou @Html.ActionLink() il suffit de choisir la première voie et de ne pas garder le "bon" préfixe.

J'ai pensé que je peut remplacer le RedirectToAction() méthode ainsi que d'ajouter ma propre version de @Html.ActionLink() méthodes.

Cela va fonctionner, mais il impliquera une méchante code pour moi pour générer les Url, parce que tout ce que j'obtiens est une chaîne de caractères représentant l'action et les contrôleurs, mais pas à la réflexion des types. Aussi il y a la route des attributs tels que dans mon exemple, je vais donc avoir à retrouver beaucoup de Cvm construit dans le code.

Est-il une meilleure solution au problème que j'essaye de résoudre?

Je suis confus, il y a une différence dans ce que ces routes sont en fait de fournir ou tout simplement si l'url est différente mais la même les données sont renvoyées à l'utilisateur? Êtes-vous à l'aide de l'url de vérification de l'authentification?
L'URL doit regarder différents, mais les mêmes données sont retournées à l'utilisateur. Il y a un système d'authentification externe pour les deux différents types d'utilisateurs qui nécessite "lite", les utilisateurs disposent de toutes les Url avec le préfixe /lite/ et "full", les utilisateurs disposent de toutes les Url avec le préfixe "plein"
Je ne sais pas si ça marcherait (frappe à partir de ma tablette atm), mais vous pouvez essayer de sous-classement de votre ResultsController à FullResultsController et LiteResultsController, et d'appliquer la relative RoutePrefix attributs à la fois. Pas besoin de dupliquer du code.
J'espère que ce n'est pas la seule authentification qui se passe ou qu'il serait très facile (bien qu'il ne semble pas inutile) pour l'utilisateur à changer de lite à full. Vous pouvez afficher sur l'utilisation de ré-écrire les règles ou quelque chose comme vous l'avez dit envelopper le changement d'itinéraire méthodes avec votre propre qui ne le remplacement après la création de la voie.
Non, il n'est d'authentification externe. C'est juste pour que cela fonctionne il requiert mon Url à être structuré comme je l'ai mentionné

OriginalL'auteur Andrew Murphy | 2014-10-23