如何在Web API中传递可选参数

本文关键字:参数 Web API | 更新日期: 2023-09-27 18:27:45

你能帮我在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=

有人能帮助吗

如何在Web API中传递可选参数

这就是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