簡體   English   中英

如何在Web API中傳遞可選參數

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

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