我想在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参数作为序列中的最后一个参数。也许我只是不知道Google使用哪些关键字,还是不可能?
感谢我所能获得的所有帮助。
谢谢。
答案 0 :(得分:4)
您已经发现,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
定向到真实网址http://localhost/api/SomeRoute/0/AnotherRoute
,该网址与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"
}
}
}