[英]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.