2009-09-18 8 views
2

Est-il possible d'intercepter tous les chemins relatifs utilisés dans une application et de supprimer/modifier une partie avant que le chemin absolu soit évalué?Interception de tous les chemins relatifs

Exemple:

Vu mvc page-

<%= Html.Image("~/{somefolder}/logo.png") %> 

Je veux intercepter le chemin relatif "~/{} somefolder de /logo.png" et remplacer "{somefolder}" avec un dossier emplacement récupéré grâce à une logique (base de données, si/autre etc.)

+0

À quel moment voulez-vous effectuer cette interception? Lors de l'affichage des pages liées à ces ressources? Ou lorsque les demandes arrivent sur le serveur web? –

+0

Avant que la page soit complètement sortie au visiteur, toutes les instances de "{somefolder}" dans n'importe quelle URL seraient remplacées par quelque chose que je veux. Je suppose que cela devrait être fait lorsque l'URL relative est résolue en une absolue, côté serveur, mais je ne suis pas sûr. – Omar

Répondre

2

Vous pouvez créer un assistant qui fait cela.

Par exemple ...

public static string LinkedImage(this HtmlHelper html, string url) 
{ 
    Regex regex = new Regex("({(.*?)})");//This is off the top of my head regex which will get strings between the curly brackets/chicken lips/whatever! :). 
    var matches = regex.Matches(url); 

    foreach (var match in matches) 
    { 
    //Go get your value from the db or elsewhere 
    string newValueFromElsewhere = GetMyValue(match); 
    url = url.Replace(string.Format("{{0}}", match), newValueFromElsewhere); 
    } 

    return html.Image(url); 
} 

En termes de recherche pour résoudre l'url lui-même, vous pouvez regarder here sur le blog de Stephen Walther.

+0

Je veux être en mesure de remplacer {somefolder} dans une URL de chemin relatif "~ /". De ce que l'article que vous avez lié, si je peux en quelque sorte remplacer la classe VirtualPathUtility (en supposant que tout passe par là), je pourrais facilement le faire. Je vais regarder dans un peu plus. – Omar

Questions connexes