2009-08-18 2 views
0

Если у меня есть ряд «шаблон» URL вида:Как использовать шаблон Url для извлечения сегмента из реального URL?

http://{username}.sitename.com/ 
http://{username}.othersite.net/ 
http://mysite.com/{username} 

и у меня есть фактический Url формы:

http://joesmith.sitename.com/ 

Есть ли способ, что я могу соответствовать шаблону Url и, в свою очередь, использовать его для извлечения части имени пользователя из фактического Url? Я думал о неприятных способах сделать это, но кажется, что должен быть более интуитивный способ достичь этого.

ASP.NET MVC использует аналогичный подход для извлечения различных сегментов URL-адреса при его создании. Учитывая пример:

{controller}/{action} 

Поэтому, учитывая URL-адрес формы, Home/Index, он знает, что это домашний контроллер вызова метода Index действия.

ответ

1

Кажется, что самое быстрое и простое решение уходит от ответа Маши.

var givenUri = "http://joesmith.sitename.com/"; 
var patternUri = "http://{username}.sitename.com/"; 
patternUri = patternUri.Replace("{username}", @"([a-z0-9\.-]*[a-z0-9]"); 

var result = Regex.Match(givenUri, patternUri, RegexOptions.IgnoreCase).Groups; 

if(!String.IsNullOrEmpty(result[1].Value)) 
    return result[1].Value; 

Кажется хорошо работать.

0

Ну, этот «шаблон URL» - это формат, который вы создали, не так ли? Вы, в основном, вам просто нужно обработать его.

Если формат его является:

  • что-нибудь внутри «{}» вещь, чтобы захватить, все остальное должно быть как

Тогда вы просто найти начало/конец индекса этих скобок и соответствовать всем остальным. Затем, когда вы доберетесь до места, где вы находитесь, убедитесь, что вы ищете только символы, чтобы они не соответствовали тому, что «токен» появляется после следующего окончания «}».

+0

Я не думаю, что вокруг строки имени пользователя будут скобки. – rahul

+0

Хм, я говорю о шаблоне. Не то, чтобы соответствовать. –

1

Не уверен, что я правильно понял этот вопрос, но вы можете просто использовать регулярное выражение, чтобы соответствовать чему-либо между «http: //» и первой точкой.

+1

Хорошая точка. Я редактировал вопрос. Шаблоны Urls могут иметь разный формат. – user135383

+0

Просто уточнить - что должно произойти с URL-адресом вроде этого: http://joesmith.sitename.com/janesmith – DmitryK

1

Самое простое регулярное выражение будет делать:

':https?://([a-z0-9\.-]*[a-z0-9])\.sitename\.com' 

Это позволит любой субдомен, который содержит только допустимые символы поддоменов. Пример разрешенных подобластей:

  • joesmith.sitename.com
  • joe.smith.sitename.com
  • joe-smith.sitename.com
  • a-very-long-subdomain.sitename.com

Как вы можете видеть, вы можете немного затруднить регулярное выражение. Например, вы можете ограничить его, чтобы разрешить определенное количество символов в субдомене.

0

Существуют определенные способы - в конечном счете, хотя ваш сервер должен быть сконфигурирован для обработки (и, возможно, маршрутизации) этих разных запросов поддоменов.

Что бы я сделал, это было бы отвечать на все запросы на субдомен (за исключением, может быть, некоторых зарезервированных слов, таких как «www», «mail» и т. Д.) На sitename.com с помощью одного обработчика или страницы (я предполагаю ASP .NET здесь на основе вашего тега C#).

Я бы использовал путь запроса, который достаточно легко получить, с помощью простой процедуры синтаксического разбора строк/регулярных выражений (удалить «http: //», захватить первый токен до «.» Или «/» или '\' и т. д.), а затем использовать это в сеансе, следя за тем, чтобы отслеживать изменения URL.

В качестве альтернативы вы можете сопоставить определенные виртуальные пути, чтобы запросить URL-адреса ('joesmith.sitename.com' => 'sitename.com/index.aspx?username=joesmith') через IIS, но это тоже противно.

Надеюсь, это поможет!

Смежные вопросы