Azure函数可选的“中间”路由参数

时间:2018-08-03 12:48:52

标签: c# .net azure azure-functions

我想在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使用哪些关键字,还是不可能?

感谢我所能获得的所有帮助。

谢谢。

1 个答案:

答案 0 :(得分:4)

您已经发现,Azure函数尚不支持可选的“中间”路由参数。只有连续的可选参数(如SomeRoute/{MyOptionalRoute:int?}/{AnotherRoute:int?})有效。

现在,找到proxy for function的解决方法,看看它是否满足您的要求。

在功能项目中添加proxies.json,将文件属性copy to output directory更改为copy if newer

enter image description here

请参阅下面的内容,我使用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"
    }
  }
}