我想在Azure函数中将“中间”路由参数设为可选。例如:
public static HttpResponseMessage MyFunction([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "SomeRoute/{MyOptionalRoute=int?}/AnotherRoute")]HttpRequestMessage req, TraceWriter log,
int MyOptionalRoute = 0)
{
//some magic
}
如果我给MyOptionalValue一个值,则此方法有效。例如:/ SomeRoute / 123 / AnotherRoute
但如果我不返回404:例如:/ SomeRoute / AnotherRoute
有谁知道是否有办法解决这个问题,这样我就不必创建两个单独的函数了?我一直在环顾四周,我所看到的是人们使用可选的route参数作为序列中的最后一个参数。也许我只是不知道谷歌使用哪些关键字,还是不可能?
感谢所有我能得到的帮助。
谢谢。
最佳答案
如您所见,Azure函数尚不支持可选的“中间”路由参数。仅连续的可选参数(如SomeRoute/{MyOptionalRoute:int?}/{AnotherRoute:int?}
)有效。
回到问题所在,找到proxy for function的解决方法,查看它是否满足您的要求。
在功能项目中添加proxies.json
,将文件属性copy to output directory
更改为copy if newer
。
请参阅下面的内容,我使用0作为保留数字作为null值的替代。代理将http://localhost/api/SomeRoute/AnotherRoute
定向到真实的URL http://localhost/api/SomeRoute/0/AnotherRoute
,该URL与SomeRoute/{MyOptionalRoute:int}/AnotherRoute
的模式匹配。
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"proxy1": {
"matchCondition": {
"methods": [ "GET" ],
"route": "/api/SomeRoute/AnotherRoute"
},
"backendUri": "http://localhost/api/SomeRoute/0/AnotherRoute"
}
}
}