You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure SQL存储过程创建API包装器?Azure服务选型咨询

解决方案说明

一、需用到的Azure服务类型

  • Azure SQL数据库:你已在使用,用于运行目标存储过程
  • API承载服务:核心可选两种类型:
    • Azure Functions(无服务器):适配轻量、低流量的API场景
    • Azure Web App:适合已有Web应用,希望整合API的场景
  • 安全辅助(可选但推荐):Azure Managed Identity,替代硬编码的数据库连接字符串,提升安全性

二、最简省成本的实现方案

首选Azure Functions(无服务器消耗计划),核心原因是按执行次数计费,空闲时段无成本,完美匹配这类简单API的使用场景。具体步骤:

  1. 创建HTTP触发的Function,设置路由模板为/{code},这样请求myappid.azurewebsites.net/XYZ时,XYZ会自动作为参数传入
  2. 用C#/.NET编写Function逻辑,调用存储过程并返回JSON结果:
    using System.Data.SqlClient;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.AspNetCore.Http;
    
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "{code}")] HttpRequest req,
        string code,
        ILogger log)
    {
        var connectionString = Environment.GetEnvironmentVariable("SqlConnectionString");
        using var conn = new SqlConnection(connectionString);
        await conn.OpenAsync();
        
        using var cmd = new SqlCommand("[dbo].[PGET_JSON]", conn);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@code", code);
        
        var jsonResult = await cmd.ExecuteScalarAsync() as string;
        return new ContentResult
        {
            Content = jsonResult,
            ContentType = "application/json",
            StatusCode = 200
        };
    }
    
  3. 在Function的应用设置中配置数据库连接字符串(或使用Managed Identity,给Function赋予Azure SQL的访问权限,无需明文连接字符串)
  4. 发布Function到Azure,即可通过指定URL访问

该方案成本极低:无服务器消耗计划每月提供100万次免费执行额度,超出后每百万次仅需几美元,完全适配轻量使用需求。

三、是否应添加至已有Azure Web App?

分场景判断:

  • 适合整合的情况:
    • 已有Web App是ASP.NET Core技术栈,整合后代码风格统一,运维更便捷
    • 已有Web App流量较低,添加该API不会显著增加资源消耗与成本
    • 希望API与已有应用共享身份验证、日志等配置体系
  • 适合单独部署的情况:
    • 已有Web App是其他技术栈(如Node.js、Python),整合.NET代码会增加复杂度
    • 已有Web App流量较高,单独部署Function可隔离负载,避免影响主应用
    • 追求极致成本优化:单独使用Function的免费额度,无需占用Web App的资源配额

总结:如果已有Web App是.NET栈且流量低,整合进去没问题;否则单独部署Azure Functions更划算、更简单。

内容的提问来源于stack exchange,提问作者Vojtěch Dohnal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:32:44