如何用Azure Function触发本地.NET 6.0服务器的函数?
实现方案:Azure Function 触发本地.NET 6服务器函数
核心思路
Azure Function作为公网暴露的端点接收表单参数,通过Azure Relay Hybrid Connections(无需将本地服务器暴露到公网)转发请求到本地.NET 6 API,触发指定函数。
步骤1:确认本地.NET 6 API可用性
保持你的本地API代码不变,启动后监听本地端口(例如http://localhost:5000):
[ApiController] [Route("[controller]")] public class demowebpagexx : ControllerBase { [HttpGet(Name = "demowebpagexx")] public void demowebpagexx(String param1) { Trace.Write($"Param1 is {param1}"); } }
测试本地API:访问http://localhost:5000/demowebpagexx?param1=Test,确认Trace能正常输出参数内容。
步骤2:创建Azure Relay Hybrid Connection
- 在Azure门户创建Relay命名空间,再在命名空间下创建Hybrid Connection(例如命名为
LocalApiRelay)。 - 记录Hybrid Connection的连接字符串(包含
EntityPath和SharedAccessKey)。
步骤3:部署HTTP触发的Azure Function
创建一个HTTP触发的Azure Function,负责接收公网请求并转发到本地API:
Function代码(C#)
using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Extensions.Logging; public static class HttpExample { private static readonly HttpClient _httpClient = new HttpClient(); [FunctionName("HttpExample")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log) { // 获取请求参数param1 string param1 = req.Query["param1"]; if (string.IsNullOrEmpty(param1)) { return new BadRequestObjectResult("请提供param1参数"); } // 从应用设置读取Relay转发地址 string relayUrl = Environment.GetEnvironmentVariable("RelayHybridConnectionUrl"); string localApiTarget = $"{relayUrl}/demowebpagexx?param1={param1}"; try { // 通过Relay转发请求到本地API await _httpClient.GetAsync(localApiTarget); return new OkObjectResult("参数已转发到本地服务器"); } catch (Exception ex) { log.LogError(ex, "转发请求失败"); return new StatusCodeResult(StatusCodes.Status500InternalServerError); } } }
配置Function应用设置
在Azure Function的应用设置中添加两项:
RelayHybridConnectionUrl:值为Hybrid Connection的转发地址(格式:https://<你的Relay命名空间>.servicebus.windows.net/<Hybrid Connection名称>)AzureWebJobsRelayConnectionString:值为你记录的Hybrid Connection连接字符串
步骤4:启动本地Relay监听程序
- 下载并安装Azure Relay Hybrid Connection Manager(HCM)。
- 打开HCM,添加你的Hybrid Connection,输入连接字符串,设置本地API的地址为
http://localhost:5000。 - 启动HCM,它会自动建立Azure Relay与本地API的隧道。
步骤5:测试功能
访问Azure Function端点:https://demowebpagexx.azurewebsites.net/api/HttpExample?param1=HelloWorld,提交后本地.NET 6服务器的demowebpagexx函数会被触发,Trace中会输出Param1 is HelloWorld。
临时测试替代方案:使用ngrok
如果仅需临时验证功能,可绕过Azure Relay:
- 运行
ngrok http 5000,得到临时公网地址(例如https://abc123.ngrok.io)。 - 修改Azure Function代码中的
localApiTarget为https://abc123.ngrok.io/demowebpagexx?param1={param1},重新部署。 - 访问Function端点即可触发本地函数,但ngrok地址重启后会变化,仅适合临时场景。
内容的提问来源于stack exchange,提问作者Lukas Fürst
相关产品推荐
相关产品推荐

