假设我有这个网址:
api.XXX.com/cities?risk=a,b&rating=x,y
我想要的是风险类别为A或B且评级为X或Y的城市列表。我应该如何实施?
我知道我可以获得风险和评级键的值,但接着是什么?是否最好简单地解析字符串并使用switch
语句?或者有更好的方法吗?
答案 0 :(得分:5)
更标准的方法是:
api.XXX.com/cities?risks=a&risks=b&ratings=x&ratings=y
这可以通过类似这样的控制器动作来处理:
[HttpGet]
public async Task<IHttpActionResult> SearchCities(
List<string> risks,
List<string> ratings)
{
var results = this.dbContext.Cities.AsQueryable();
if(risks.Any())
{
results = results.Where(c => c.Risks.Any(cr => risks.Contains(cr.Code));
}
if(ratings.Any())
{
results = results.Where(c => ratings.Contains(c.Rating));
}
...
}
类似的回答here。
答案 1 :(得分:0)
我建议创建一个POCO来表示此端点将接收的选项:
public class CitySearchOptions
{
public List<string> Risk { get; set; }
public List<string> Rating { get; set; }
}
然后,您可以使用控制器签名中的[FromUri]
属性将查询字符串自动反序列化到POCO中。从那里,您可以轻松实现逻辑以对接收到的值进行操作。
public async Task<IHttpActionResult> SearchCities([FromUri] CitySearchOptions options)
请注意,上面是伪代码,如果没有对查询字符串格式进行一些调整,可能无法解决您的问题。 This question建议对于基于列表的查询参数,您应该更喜欢这样的格式:
/cities?risk=a&risk=b&rating=x&rating=y