Раствор 1
Здесь есть достаточно полная замена токенов на основе регулярных выражений и документация:
http://www.simple -talk.com / DotNet / asp.net / regular-expression-based-token-replacement-in-asp.net /
Решение 2
Если вы не хотите добавлять столько кода, вот другой подход. Этот код ищет токены (отформатированные как # MyName #) в разделе конфигурации AppSettings файла. Я использовал аналогичный подход в другом проекте для поиска их в ресурсах и базе данных (или всех 3 с определенным приоритетом). Вы можете изменить формат своих токенов, если хотите, изменив регулярное выражение и строки замены строк.
Конечно, это можно настроить для повышения производительности, используя регулярные выражения во всем.
Public Shared Function ProcessConfigurationTokens(ByVal Source As String) As String
Dim page As Page = CType(Context.Handler, Page)
Dim tokens() As String = GetConfigurationTokens(Source)
Dim configurationName As String = ""
Dim configurationValue As String = ""
For Each token As String In tokens
'Strip off the # signs
configurationName = token.Replace("#"c, "")
'Lookup the value in the configuration (if any)
configurationValue = ConfigurationManager.AppSettings(configurationName)
If configurationValue.Contains(".aspx") OrElse configurationValue.Contains("/") Then
Try
Source = Source.Replace(token, page.ResolveUrl(configurationValue))
Catch
Source = Source.Replace(token, configurationValue)
End Try
Else
'This is an optimization - if the content doesn't contain
'a forward slash we know it is not a url.
Source = Source.Replace(token, configurationValue)
End If
Next
Return Source
End Function
Private Shared Function GetConfigurationTokens(ByVal Source As String) As String()
'Locate any words in the source that are surrounded by # symbols
'and return the list as an array.
Dim sc As New System.Collections.Specialized.StringCollection
Dim r As Regex
Dim m As Match
If Not String.IsNullOrEmpty(Source) Then
r = New Regex("#[^#\s]+#", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
m = r.Match(Source)
While m.Success
sc.Add(m.Groups(0).Value)
m = m.NextMatch
End While
If Not sc.Count = 0 Then
Dim result(sc.Count - 1) As String
sc.CopyTo(result, 0)
Return result
End If
End If
Return New String() {}
End Function