首页 > 解决方案 > Azure 函数代理 - 必需的请求标头

问题描述

我想使用 Azure 函数代理通过要求存在指定的请求标头来限制对 API 的访问X-MY-HEADER。我不想在这里实际检查标题的值,只是它存在。

我找不到任何这样的例子,一些试验和错误也没有奏效。在为标头添加附加项之前,代理配置正常工作。

我试过类似的东西:

{
  "proxies": {
    "Mock API - POST": {
      "matchCondition": {
        "methods": [ "POST" ],
        "route": "/api",
        "request.headers.X-MY-HEADER": "{*}"
      },
      "responseOverrides": {
        "response.headers.Location": "https://REAL/API/ADDRESS/ETC"
      }
    }
  }
}

"request.headers": "X-MY-HEADER"但似乎都不起作用。

这可能吗,我只是语法错误?

如果标题丢失,我很高兴它只是 404。

标签: azure-functionsazure-function-app-proxy

解决方案


您可以像这样进行授权:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace FunctionApp62
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            if (req.Headers.Keys.Contains("X-MY-HEADER"))
            {
                log.LogInformation("has header X-MY-HEADER!");
                //put your process logic here.
            }

            return new OkObjectResult("!!!!!!!!!!!!!!!!!!!!!!");
        }
    }
}

(在你的函数的逻辑中做autherize,如果请求有标题,那么做一些事情。)


推荐阅读