Azure Functions v2中Route特性失效:Mvc Route属性无效,HttpTrigger参数可行
Azure Functions路由问题:Mvc.Route特性无效的解决办法
我太懂你碰到的这个坑了——在Azure Functions里加了Microsoft.AspNetCore.Mvc.Route特性,结果完全没效果,但把路由配置写到HttpTrigger的Route参数里就正常工作,对吧?这其实是因为Azure Functions的路由机制和ASP.NET MVC根本不是一套东西。
为什么Mvc.Route特性不生效?
Azure Functions的运行时是独立于ASP.NET MVC框架的,它有自己的路由解析逻辑。MVC的Route特性是给ASP.NET MVC/Razor Pages这类框架用的,Functions的运行时根本不会识别这个特性,自然也就不会应用它配置的路由规则。而HttpTrigger里的Route参数是Functions原生支持的配置项,这才是它识别路由的正确方式。
正确的配置方式
你只需要把路由规则移到HttpTrigger的Route参数里就可以了,修改后的代码如下:
public static class Function1 { [FunctionName("StartUserSession")] public static IActionResult StartUserSession( [HttpTrigger(AuthorizationLevel.Function, methods: new string[] { "get", "post" }, Route = "Client/StartUserSession")] HttpRequest req, TraceWriter log) { var UserId = req.Query["UserId"]; return new OkObjectResult($"Session started for user: {UserId}"); } }
补充:隔离进程模型的特殊情况
如果你的Functions用的是隔离进程模型(Isolated Worker),那倒是可以用ASP.NET MVC的路由特性,但前提是你得在Program.cs里配置好ASP.NET Core的路由中间件。不过从你的代码风格来看,应该是用的默认的进程内模型,这种情况下就老老实实使用HttpTrigger的Route参数就好。
总的来说,进程内Azure Functions不兼容MVC的路由特性,必须用它原生的HttpTrigger.Route来定义路由,这是平台的设计逻辑决定的。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

