如何在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=
有人能帮助吗
这就是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