通过 http 管道将逗号分隔的值转换为 list<string>

Posted

技术标签:

【中文标题】通过 http 管道将逗号分隔的值转换为 list<string>【英文标题】:Convert comma separated values to list<string> through http pipeline 【发布时间】:2017-07-17 12:43:40 【问题描述】:

在我的 API 模型绑定器获取请求中,我想将通过获取请求传递的逗号分隔字符串转换为列表。我只想对模型中的一个属性执行此操作,因此 IModelBinder 不是最好用的,也许是 TypeConverter?

我该怎么做呢?

你们中的一些人似乎对模糊的问题感到困惑。 我想在进行 api 调用之后在 http 中间件中添加映射。有许多方法,例如 itypeconverter、动作过滤器。这意味着我将不得不一遍又一遍地调用该方法。

所以如果我有一个名为

的 API 调用
public IActionResult getUserConfigs(List<string>UserIds, list<int> permmisionIds)

他们发送请求,例如UserIds=1,2,3,4,5,如何插入中间件组件将字符串映射到列表。

这需要在点网核心项目中工作。

【问题讨论】:

***.com/questions/9981330/… How can I convert comma separated string into a List<int>的可能重复 我真的不明白这里的七票否决。问题是不是 “如何在C#中拆分字符串”。问题是 “在哪里以及如何注册一些接受来自 HTTP 请求的逗号分隔字符串并将其绑定到我的 Web API 模型的 List&lt;T&gt; 属性的组件,而不必在整个地方重复解析” . 正如我在问题中所说,我想设置模型绑定方法并重新映射通过 http 请求发送的输入字段,例如userIds=1,2,3 将其映射到列表。 为什么要发送 JSON 属性 UserIds: '1,2,3,4,5' 而不是 UserIds: [1, 2, 3, 4, 5]?后者会自动绑定到IList&lt;string&gt; 【参考方案1】:

由于您没有提供有关模型外观或任何代码的详细信息,因此我将构建一个简单的示例来回答我理解的问题...

这将接收一个字符串值,将其分成一个数组,并从分离的值中构建一个模型实例:

public class User

    public string Username  get; set; 
    public string Password  get; set; 


public void ReceiveUserString(string source)

    string[] UserString = source.Split(',');

    var User = new User();
    foreach (string u in UserString)
    
        User.Username = u[0];
        User.Password = u[1];
    

然后可以将User 对象保存到您的数据库中,或者...无论您想在 API 上使用它做什么。

如果您要获取用户列表,则需要第二个分隔符来分割行:

string[] UsersFromString = source.Split('|');

foreach (string user in UsersFromString)

    var User = new User();
    string[] Fields = user .Split(',');

    User.Username = Fields[0];
    User.Password = Fields[1];

根据您的问题:

我想将通过 get 请求传递的逗号分隔字符串转换为列表。

您可以稍微更改代码以使您的输出为List&lt;User&gt;

string[] UsersFromString = source.Split('|');

List<User> Users = new List<User>();
foreach (string user in UsersFromString)

    string[] Fields = user .Split(',');
    Users.Add(new User User.Username = Fields[0], User.Password = Fields[1] );

【讨论】:

对于一个非常模糊的问题,这似乎是一个完全有效的答案。 Downvoters,请提供一个论据,说明这个答案可以改进。 @EricWu 这里的问题是如何在 ASP.NET MVC 中惯用地处理这种情况。问题是 not "How do I split a string" (我猜这个问题的所有反对者都假定),但它是 "在哪里拆分字符串从请求中将其绑定到模型属性,而不必为每个模型、每个属性和每个操作方法都这样做”.

以上是关于通过 http 管道将逗号分隔的值转换为 list<string>的主要内容,如果未能解决你的问题,请参考以下文章

将长值列表转换为逗号分隔以及每个值周围的括号

java中逗号分隔的字符串和List相互转换

python Python:将set,tuple或list转换为逗号分隔的字符串。

逗号分隔的字符串与List互转

将逗号分隔值转换为双引号逗号分隔字符串

将通用列表转换为 CSV 字符串