如何将Azure Function路由的最后两个参数设置为可选?
在Azure Function中实现URL路由的可选参数
要将moneyCurrency和moneyAmount设为可选参数,需遵循Azure Function的路由规则,同时配合参数默认值或可空类型实现,具体步骤如下:
正确实现方案
1. 调整路由模板
将最后两个参数标记为可选,注意可选参数必须放在路由的最末尾,修改后的路由格式如下:
Route = "createmoney/printdate/{printDate}/moneycurrency/{moneyCurrency?}/moneyamount/{moneyAmount?}"
2. 配置方法参数
根据需求选择以下两种方式之一:
- 设置默认值:当请求未传入参数时,使用预设的默认值
[FunctionName("MakeMeRich")] public async Task<IActionResult> MakeMeRich( [HttpTrigger(AuthorizationLevel.Function, "get", Route = "createmoney/printdate/{printDate}/moneycurrency/{moneyCurrency?}/moneyamount/{moneyAmount?}")] HttpRequest req, ILogger log, string printDate, string moneyCurrency = "USD", // 默认货币为USD decimal moneyAmount = 0) // 默认金额为0 { // 函数业务逻辑 return new OkObjectResult($"打印日期: {printDate}, 货币: {moneyCurrency}, 金额: {moneyAmount}"); } - 使用可空类型:允许参数为
null,需自行处理空值场景[FunctionName("MakeMeRich")] public async Task<IActionResult> MakeMeRich( [HttpTrigger(AuthorizationLevel.Function, "get", Route = "createmoney/printdate/{printDate}/moneycurrency/{moneyCurrency?}/moneyamount/{moneyAmount?}")] HttpRequest req, ILogger log, string printDate, string? moneyCurrency, // 可空字符串 decimal? moneyAmount) // 可空decimal { // 处理null值逻辑,比如赋默认值 var currency = moneyCurrency ?? "CNY"; var amount = moneyAmount ?? 100; return new OkObjectResult($"打印日期: {printDate}, 货币: {currency}, 金额: {amount}"); }
关键注意事项
- 可选参数必须位于路由的最后段,不能在中间插入可选参数,否则路由匹配会失败
- 路由中的
{参数名?}标记和方法参数的默认值/可空类型必须配套使用,缺一不可
合法请求示例
- 传入所有参数:
GET /api/createmoney/printdate/2024-05-20/moneycurrency/EUR/moneyamount/1000 - 仅传打印日期和货币:
GET /api/createmoney/printdate/2024-05-20/moneycurrency/GBP - 仅传打印日期:
GET /api/createmoney/printdate/2024-05-20
内容的提问来源于stack exchange,提问作者MidTown
相关产品推荐
相关产品推荐

