簡體   English   中英

具有多個可選參數(客戶端和API)的搜索功能

[英]Search function with multiple optional parameters (Client and API)

我對API和MVC相對較新,但仍在學習中。 我僅通過檢索(所有)數據,更新,添加和刪除來完成Web API和客戶端MVC(GET,PUT,POST,DEL)的基礎知識。 這是我老師上課的主要指南。 http://www.asp.net/web-api/overview/data/using-web-api-with-entity-framework/part-1

我目前正在休學期,正在獨自探索。 我遇到了一項特定的任務,該任務是通過10個左右的參數過濾器顯示項目列表,其中大多數是可選字段。 字段:名稱,形狀,顏色,簽名,產品代碼等。大多數字段為空,只有少數幾個是下拉列表。

大多數指南和教程都會給我示例1,或者可能提供一些參數,但是此任務需要的更多。

這里的問題是,我不知道如何將MVC客戶端中這么多的參數傳遞給API。 我已經閱讀了許多其他解決方案,可以將它們作為URI傳遞

baseuri/action?a=&b=&c=1&d=example

但是,如何忽略從未填充過的空字段,而僅搜索數據庫中實際填充的空字段?

baseuri/action?a=&b=&c=1&d=example

//ignoring a and b
var result = from b in db.table where (c==1 && d==example)

我的老師建議我自己做一個控制器和功能,但是我不確定該怎么做。

有某些解決方案建議我使用[FromURI],但是搜索功能太復雜了,我也不太確定如何使用[FromBody]。

有什么幫助嗎?

要忽略空字段,可以使參數可為空,並僅在它們具有值時按它們過濾。 例如:

public IQueryable<Row> Action(string a, bool? b, int? c, string d)
{
   var result = db.table.Where(e => true);
   if (a != null)
       result = result.Where(e => e.a == a);
   if (b.HasValue)
       result = result.Where(e => e.b == b.Value);
   if (c.HasValue)
       result = result.Where(e => e.c == c.Value);
   if (d != null)
       result = result.Where(e => e.d == d);
   return result;
}

作為10多個參數的解決方案,我可以提出如下建議:

public IQueryable<Row> Action()
{
  var result = db.table.Where(e => true);
  foreach(var parameter in HttpUtility.ParseQueryString(ActionContext.Request.RequestUri.Query).ToKeyValuePairs())
  {
    switch(parameter.Key)
    {
      case "a":
        result = result.Where(e => e.a == parameter.Value);
        break;
      case "b":
        result = result.Where(e => e.b == parameter.Value);
        break;
      ...
    }   

  }
  return result;
}

或檢查查詢以獲取所需參數並根據其值進行過濾

暫無
暫無

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

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