You need to enable JavaScript to run this app. 如何在ASP.NET应用中访问API密钥以实现业务逻辑判断
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET应用中访问API密钥以实现业务逻辑判断

ASP.NET 控制器访问API密钥的实现方案

API密钥一般由调用方放在请求头中传递,你可以通过以下几种方式获取使用:

1. 直接在接口内提取(最简便,适合单接口使用场景)

你可以直接从当前请求的Headers中读取调用方传递的密钥,同时通过依赖注入读取你预设的客户密钥做比对,修改后的代码如下:

namespace ProductList.Api.Controllers {
    [Route("api/[controller]")]
    public class ProductController : Controller {
        private readonly IConfiguration _config;
        private readonly IProductService _productService;

        // 构造函数注入配置服务和你的商品服务
        public ProductController(IConfiguration config, IProductService productService)
        {
            _config = config;
            _productService = productService;
        }

        [HttpGet("productlist")]
        public async Task<IActionResult> ProductList() {
            // 从请求头读取调用方传递的API密钥,头名可根据你们的约定修改
            if (!Request.Headers.TryGetValue("X-Api-Key", out var requestApiKey))
            {
                return Unauthorized("请求缺少必填的API密钥");
            }
            // 读取预设的客户专属密钥,也可以改为从数据库查询对应用户的密钥
            var customerKey = _config.GetValue<string>("CustomerApiKey");
            
            if(requestApiKey.ToString().Trim() == customerKey.Trim()) {
                return Ok(_productService.CustomerList());
            } else {
                return Ok(_productService.StandardList());
            }
        }
    }
}

你需要在appsettings.json中添加预设的客户密钥配置:

{
  "CustomerApiKey": "你的客户专属API密钥值"
}

2. 全局预解析(适合多接口共用密钥场景)

如果你的项目有多个接口都需要读取API密钥,可以通过自定义过滤器/中间件提前把密钥解析后存入HttpContext上下文,控制器中直接读取即可:

第一步:定义API密钥解析过滤器

public class ApiKeyExtractFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        if (context.HttpContext.Request.Headers.TryGetValue("X-Api-Key", out var apiKey))
        {
            context.HttpContext.Items["RequestApiKey"] = apiKey.ToString().Trim();
        }
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // 无需实现
    }
}

第二步:在Program.cs中注册过滤器

builder.Services.AddControllers(options =>
{
    options.Filters.Add<ApiKeyExtractFilter>();
});

第三步:控制器中直接读取密钥

var apiKey = HttpContext.Items["RequestApiKey"]?.ToString();

注意事项

  • 生产环境不要把API密钥硬编码在代码中,建议放在环境变量、专用密钥管理服务中
  • API密钥传输必须使用HTTPS协议,避免明文传输导致密钥泄露

内容的提问来源于stack exchange,提问作者SørenHN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 02:06:04