Разделить строку (путь Uri) на основе "/"

Интересно, может ли кто-нибудь указать мне в правильном направлении. То, что я хотел бы достичь, состоит в том, чтобы разбить строку, основываясь на том, что в ней есть "/". Например, если бы у меня было: www.site.com/course/123456/216 в коде (С#), я хотел бы иметь возможность разделить строку в коде, чтобы 123456 можно было присвоить переменной param1 и 216 назначить param2 (курс - это "дружественное" название страницы). Если бы мне пришлось добавить третью строку '/' в строку, мне бы хотелось, чтобы это стало param3 и т.д. И т.д.

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

Ответ 1

Uri.Segments может быть, то, что вы ищете:

new Uri("http://www.contoso.com/foo/bar/index.htm#search").Segments

Результаты в [ "/", "foo/", "bar/", "index.html" ]

Ответ 2

Почему бы просто не использовать split?

var valueArray = "www.site.com/course/123456/216".Split('/');

В массиве будет разбита вся строка

index 0 будет "www.site.com" и т.д.

Ответ 3

HttpContext.Current.Request.Url.AbsolutePath.Split('/')

Ответ 4

Итак, сделав предположение , что значения не имеют / в них:

var splitVals = queryString.Split('/');
var vals = new Dictionary<string, string>();
for (int i = 2; i <= splitVals.Count; i++)
{
    vals.Add(string.Format("param{0}", i), vals[i]);
}

Это поможет вам начать. Теперь, если вы хотите установить их в реальные переменные, вам нужно будет сделать какое-то отражение и использовать отражение, но ваш вопрос недостаточно близок, чтобы сделать какие-либо реальные предположения.

ИЗМЕНИТЬ

Чтобы сделать этот код повторно используемым, я бы построил метод расширения:

namespace System
{
    public static class StringExtensions
    {
        public static Dictionary<string, string> SplitQueryString(this string queryString)
        {
            var splitVals = queryString.Split('/');
            var vals = new Dictionary<string, string>();
            for (int i = 2; i <= splitVals.Count; i++)
            {
                vals.Add(string.Format("param{0}", i), vals[i]);
            }

            return vals;
        }
    }
}

потому что тогда вы можете сделать это:

var vals = queryString.SplitQueryString();

Ответ 6

url: server/func2/SubFunc2

//Получить компоненты пути. Сцепление разделителей. Возвращает { "/", "func2/", "sunFunc2" }. string[] pathsegments = myUri.Segments;