簡體   English   中英

如何在Web API查詢字符串中將多個參數作為OR處理?

[英]How do I handle multiple parameters as an OR in a Web API querystring?

假設我有以下網址:

api.XXX.com/cities?risk=a,b&rating=x,y

我想要的是風險類別為A或B且評級為X或Y的城市列表。我應該如何實現?

我了解我可以獲取“風險”和“評級”鍵的值,但是那又如何呢? 最好只解析字符串並使用switch語句嗎? 還是有更好的方法?

一個更標准的方法是:

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));
    }
    ...
}

類似的答案在這里

我建議創建一個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)

請注意,以上是偽代碼,如果不對查詢字符串的格式進行一些調整,就可能無法立即使用。 這個問題表明,對於基於列表的查詢參數,您應該喜歡這樣的格式:

/cities?risk=a&risk=b&rating=x&rating=y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM