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

从Logic App传Dropbox文件内容到Azure Function遇媒体类型错误如何解决?

解决Azure Function接收CSV内容时的UnsupportedMediaType错误

这个错误的根源很清晰——你的Azure Function WebHook端点只接受JSON格式的请求体,但你直接传递了原始的CSV内容,所以触发了UnsupportedMediaType错误。下面是具体的解决步骤,适配不同的实现方式:

1. 将CSV内容包装为JSON结构

不管你用的是低代码工作流工具(比如Make、Zapier)还是自定义代码,核心操作都是把CSV内容放进一个JSON对象的属性里,让请求体符合要求。

举个简单的JSON结构示例:

{
  "csvContent": "完整的CSV文件内容字符串",
  "fileName": "example.csv"
}

如果是用Python自定义代码发起请求,你可以这样构造:

import json
import requests

# 读取CSV文件内容
with open("target.csv", "r") as f:
    csv_content = f.read()

# 构造JSON请求体
payload = json.dumps({
    "csvContent": csv_content,
    "fileName": "target.csv"
})

# 调用Azure Function
response = requests.post(
    "https://your-function-name.azurewebsites.net/api/YourFunction",
    data=payload,
    headers={"Content-Type": "application/json"}
)

2. 确保请求头设置正确

调用Azure Function时,一定要在请求头里添加Content-Type: application/json——这是WebHook验证请求格式的关键。

如果你用的是低代码工具,在HTTP请求步骤的「请求头」配置里手动添加这个键值对即可;如果是代码实现,就像上面Python示例里那样,在headers参数中指定。

3. 在Azure Function中解析JSON获取CSV内容

接下来需要在Azure Function里读取JSON请求体,提取出CSV内容再做后续处理。这里提供两种常见语言的示例:

C# Azure Function

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 CsvProcessingFunction
{
    public static class ProcessCsv
    {
        [FunctionName("ProcessCsv")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("Received CSV processing request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            
            // 提取CSV内容和文件名
            string csvContent = data?.csvContent;
            string fileName = data?.fileName;

            if (string.IsNullOrEmpty(csvContent))
            {
                return new BadRequestObjectResult("请求体中缺少csvContent字段");
            }

            // 这里添加你的CSV处理逻辑,比如用CsvHelper解析内容
            // ...

            return new OkObjectResult($"已成功处理文件:{fileName}");
        }
    }
}

Python Azure Function

import azure.functions as func
import json
import csv
from io import StringIO

def main(req: func.HttpRequest) -> func.HttpResponse:
    try:
        # 解析JSON请求体
        req_body = req.get_json()
        csv_content = req_body.get('csvContent')
        file_name = req_body.get('fileName', 'unknown.csv')

        if not csv_content:
            return func.HttpResponse(
                "请在请求体中提供csvContent字段",
                status_code=400
            )

        # 将CSV字符串转为可读取的流,逐行处理
        csv_reader = csv.reader(StringIO(csv_content))
        for row in csv_reader:
            # 处理每一行数据的逻辑
            print(f"处理行:{row}")

        return func.HttpResponse(f"文件 {file_name} 处理完成")
    
    except Exception as e:
        return func.HttpResponse(
            f"处理CSV时出错:{str(e)}",
            status_code=500
        )

额外优化:直接将CSV转为JSON数组传递

如果你的工作流工具支持(比如Make有内置的「CSV to JSON」模块),可以先把CSV内容转换成JSON数组再传递给Azure Function。这样在Function里就不需要再解析CSV字符串,直接处理JSON数据即可,更高效也更不易出错。


内容的提问来源于stack exchange,提问作者Bernard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:48:29