15

想知道是否有人可以指出我正确的方向。我想要实现的是根据其中包含“/”的字符串来拆分字符串。例如,如果我有: www.site.com/course/123456/216 in code (c#) 我希望能够在代码中拆分字符串,以便可以将 123456 分配给变量 param1 并将 216 分配给 param2 (当然是页面的“友好”名称)。如果我要在字符串上添加第三个“/”,我希望它成为 param3 等等。

理想情况下,我希望能够将此代码放在某个地方,以便我可以将它包含在我需要它工作的任何用户控件中。

4

6 回答 6

26

Uri.Segments可能是您正在寻找的:

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

结果是[ "/", "foo/", "bar/", "index.html" ]

于 2013-07-01T20:58:37.680 回答
7

为什么不直接使用拆分?

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

该数组将分解整个字符串

索引 0 将是“www.site.com”等等。

于 2013-07-01T20:31:32.160 回答
2
HttpContext.Current.Request.Url.AbsolutePath.Split('/')
于 2013-07-01T20:53:56.007 回答
2

好吧,假设这些值不会包含/在其中:

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();
于 2013-07-01T20:33:26.710 回答
1

http://msdn.microsoft.com/en-us/library/b873y76a.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

string QueryString = "1234/567/890"; string[] QueryArray = QueryString.Split('/');

现在QueryArray[0] = 1234,,,,QueryArray[1] = 567_ QueryArray[2] = 890_

于 2013-07-01T20:32:03.103 回答
1

网址:server/func2/SubFunc2

// 获取路径组件。尾随分隔符。返回 {“/”、“func2/”、“sunFunc2”}。 string[] pathsegments = myUri.Segments;

于 2016-01-12T05:16:27.357 回答