[英]How to pass optional parameters in Web API
您能幫我在uri之間傳遞可選參數嗎
[Route("api/values/{a}/{b?}/{c?}")]
public string Get(string a = "", string b = "", string c = "")
{
return string.Format("a={0}, b={1}, c={2}", a, b, c);
}
我可以調用api-
api/values/abc/pqr/xyz returns a=abc, b=pqr, c=xyz
api/values/abc/pqr returns a=abc, b=pqr, c=
但是我想這樣稱呼api-
api/values/abc//xyz which should return a=abc, b=, c=xyz
returns a=abc, b=xyz, c=
誰能幫忙
這就是URI的含義-它們應該代表對象的某些路徑。 在途中未指定“ b”或“ a”的情況下,您應該無法進入“ c”。
但是,如果您真的想要,也許只是使用某種通配符作為值? 例如:/ api / values / abc / * / xyz,然后在代碼中檢查路徑的一部分是否為通配符。 這樣,您將擴展URI的邏輯而不是破壞它。 URI將保持人類可讀性和明顯性(例如,獲取容器ABC的所有后代的所有值XYZ)。
為了使事情保持干燥,請編寫一個自定義模型綁定程序,該綁定程序會將URL中找到的所有通配符轉換為null(或其他)值,然后將其傳遞給控制器。 看一下System.Web.Http.ModelBinding命名空間以開始。
一個簡單的解決方法是只使用可選的查詢參數:
[Route("api/values")]
public string Get(string a = "", string b = "", string c = "")
{
return string.Format("a={0}, b={1}, c={2}", a, b, c);
}
=>
/api/values?a=abc&c=xyz
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.