Рейтинг:
2
#realJSOP
private string PrefixSubDomain(string subDomain)
{
// split the string
string[] parts = Request.Url.ToString().Split('/');
// create a StringBuilder to economize overhead - init with
// the first element of the split string array
StringBuilder newPath = new StringBuilder(parts[0]);
// now process the remaining array elements
for (int i = 1; i < parts.Length; i++)
{
if (i == 2)
{
newPath.AppendFormat("/{0}", subDomain);
if (subDomain.EndsWith("."))
{
newPath.Append(parts[i]);
}
else
{
newPath.AppendFormat(".{0}", parts[i]);
}
}
else
{
newPath.AppendFormat("/{0}", (string.IsNullOrEmpty(parts[i]) ? "" : parts[i]));
}
}
return newPath.ToString();
}
Извините за все эти изменения. Я чинил, когда думал о вещах.
AspDotNetDev
Пересмотрите прочь! Хотя, по-моему, я тебя побил. Я собираюсь опубликовать решение, которое я только что придумал. Я проверю и ваш, и мой после того, как отправлю свой.
#realJSOP
Я только что опубликовал свою последнюю правку.
#realJSOP
когда вы добавляете поддомен в "www.blah.com", вы снимаете "www" и заменяете его новым поддоменом?
Учитывая все вращения, которые вы должны выполнить, чтобы сделать это по-другому, вы должны подвергнуть сомнению ценность отказа от использования строки.Заменять. Это пустая победа.
AspDotNetDev
Для моих целей я никогда не буду иметь дело с ... www.site.com-но это может оказаться полезным для кого-то еще. Кроме того, имейте в виду, что "http" может быть "https" и если эта функция не использует "запрос.Url" он также может иметь дело со случаем полного отсутствия "http://". Вот почему мое решение использует UriBuilder... потому что это класс, который имеет дело с этими нюансами автоматически.
#realJSOP
Мое решение не зависит от http/https. Он просто разбивает строки на прямые косые черты, а затем перестраивает url-адрес по частям за раз.
AspDotNetDev
Да, я не это имел в виду. Я просто упомянул об этом, потому что это может вызвать проблемы, если кто-то будет использовать строку.Заменять().
AspDotNetDev
Это, кажется, не работает для меня. Когда я пытаюсь запустить его локально, выводится "localhost". Когда я запускаю его на живом сайте, результат таков: "blog.site.com". Кажется, что он опускает протокол, порт, путь и страницу. Кроме того, я проверил свое решение, и оно, кажется, работает нормально (пришлось внести небольшие изменения).
#realJSOP
Вероятно, это потому, что я использовал Host вместо всего URL-адреса. Я протестировал это в консольном приложении (меня больше беспокоил синтаксический анализ/повторная сборка).
Рейтинг:
15
AspDotNetDev
private string PrefixSubdomain(string subdomain)
{
var builder = new UriBuilder(Request.Url);
builder.Host = subdomain + "." + builder.Host;
return builder.Uri.ToString();
}
Мне не очень нравится, что я использую строковую константу ("."). Кроме того, это самый элегантный код, который я мог придумать.
#realJSOP
Блин. Я единственный, кто ответил?
AspDotNetDev
Ну, ты и я. Думаю, мы были единственными, кто справился с этой задачей.