【发布时间】:2018-08-30 05:43:58
【问题描述】:
我有一个 URL 字符串进入 API,例如c1:1=25.
*http://mysite/api/controllername?serial=123&c1:=25*
我想将其拆分为通道名称(c1)、冒号后的通道读数编号(1)和值(25)。
也有没有冒号的情况,因为它是一个固定值,例如序列号 (serial=123)。
我已经创建了一个类:
public class UriDataModel
{
public string ChannelName { get; set; }
public string ChannelNumber { get; set; }
public string ChannelValue { get; set; }
}
我正在尝试将 IEnumerable 与一些 LINQ 一起使用,但并没有走得太远。
var querystring = HttpContext.Current.Request.Url.Query;
querystring = querystring.Substring(1);
var urldata = new UrlDataList
{
UrlData = querystring.Split('&').ToList()
};
IEnumerable<UriDataModel> uriData =
from x in urldata.UrlData
let channelname = x.Split(':')
from y in urldata.UrlData
let channelreading = y.Split(':', '=')
from z in urldata.UrlData
let channelvalue = z.Split('=')
select new UriDataModel()
{
ChannelName = channelname[0],
ChannelNumber = channelreading[1],
ChannelValue = channelvalue[2]
};
List<UriDataModel> udm = uriData.ToList();
我觉得我在这里把事情复杂化了。
综上,我想把字符串分成三部分,没有冒号的地方一分为二。
任何指针都会很棒。 TIA
【问题讨论】:
-
参数的顺序给定了吗? (可以是...
?c1:=25&serial=123,还是不是?) 如果不是,为什么不使用Regex? -
它们通常按固定顺序排列,但是一旦我将它们放在列表中,我需要按另一个字段对它们进行排序。不过我会检查正则表达式,我没想到...
-
您可以使用regex101.com 测试您的
Regex,然后使用Regex类将其应用到C#。
标签: c# asp.net-web-api query-string asp.net-apicontroller