2017-07-17 58 views
-6

在我的API模型绑定器获取请求中,我想将通过get请求传递的逗号分隔字符串转换为列表。我只想为我的模型中的属性做一次,所以IModelBinder不会是最好用的,也许是TypeConverter?通过http管道将逗号分隔值转换为列表<string>通过http管道

我该怎么做呢?

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

所以,如果我有一个API调用名为

public IActionResult getUserConfigs(List<string>UserIds, list<int> permmisionIds) 

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

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

+0

https://stackoverflow.com/questions/9981330/how-to-pass-an-array-of-整数到asp-net-web-api – CodeCaster

+3

可能重复[如何将逗号分隔字符串转换为列表](https://stackoverflow.com/questions/9301268/how-can-i-convert-comma -separated-string-into-a-listint) – Maddy

+1

我真的不明白在这里的七个downvotes。问题是**不**“如何在C#中分割字符串”_。问题是“在哪里以及如何注册某个组件,它接受来自HTTP请求的以逗号分隔的字符串,并将其绑定到我的Web API模型的'List '属性,而不必在整个地方重复解析” 。 – CodeCaster

回答

-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<User>你的输出:

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] }); 
} 
+0

这似乎是一个非常模糊的问题的完美答案。Downvoters,请提供一个关于哪个答案可以改进的论点。 –

+2

@EricWu这里的问题是如何在ASP.NET MVC中惯用地处理这种情况。问题是**不** **“我如何分割一个字符串”_(我猜这个问题是所有问题的推测者),但它是_“在哪里从请求中分离一个字符串以将其绑定到模型属性无需为每个模型和每个属性以及每个操作方法都这样做“_。 – CodeCaster