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

.NET 8升级后Azure HttpTrigger函数Blob输出异常求助

.NET 8 Isolated模式Azure函数:修复Blob输出配置问题(从.NET 6升级后)

问题背景

从.NET 6升级到.NET 8 isolated模式的Azure HttpTrigger函数时,Visual Studio升级工具错误地将原Blob输出特性改为BlobInput,需修正为正确的BlobOutput配置。

解决步骤

1. 确认依赖包已安装

确保项目中已安装Microsoft.Azure.Functions.Worker.Extensions.Storage包(针对isolated模式),可通过NuGet包管理器安装,或执行以下命令:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage

2. 使用BlobOutput特性配置输出

在.NET 8 isolated模式中,BlobOutput特性支持直接指定路径和连接字符串名称(通过Connection参数),示例代码如下:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.IO;
using System.Threading.Tasks;

public class BlobOutputFunction
{
    private readonly ILogger<BlobOutputFunction> _logger;

    public BlobOutputFunction(ILogger<BlobOutputFunction> logger)
    {
        _logger = logger;
    }

    [Function("HttpToBlob")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
        // 配置Blob输出路径+连接字符串配置项名称
        [BlobOutput("mycontainer/{rand-guid}.txt", Connection = "AzureWebJobsStorage")] Stream blobOutput)
    {
        _logger.LogInformation("Received request to write to blob storage.");

        // 读取请求内容并写入Blob
        string content = await new StreamReader(req.Body).ReadToEndAsync();
        await new StreamWriter(blobOutput).WriteAsync(content);

        var response = req.CreateResponse(System.Net.HttpStatusCode.OK);
        await response.WriteStringAsync("Content written to blob successfully.");
        return response;
    }
}

3. 连接字符串配置

  • 本地开发:在local.settings.json中添加连接字符串:
{
  "Values": {
    "AzureWebJobsStorage": "你的Blob存储连接字符串",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
  }
}
  • Azure部署:在函数应用的「配置」-「应用程序设置」中添加AzureWebJobsStorage键值对。

4. 全局配置默认连接(可选)

若不想在每个BlobOutput特性中指定Connection参数,可在Program.cs中全局配置默认连接:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        services.Configure<BlobServiceClientOptions>(options =>
        {
            options.ConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
        });
    })
    .Build();

host.Run();

配置后,BlobOutput特性可省略Connection参数:

[BlobOutput("mycontainer/{rand-guid}.txt")] Stream blobOutput

5. 注入BlobServiceClient(复杂操作场景)

如果需要更灵活的Blob操作(如创建容器、设置元数据),可直接注入BlobServiceClient:

using Azure.Storage.Blobs;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System;
using System.IO;
using System.Threading.Tasks;

public class BlobOutputFunction
{
    private readonly ILogger<BlobOutputFunction> _logger;
    private readonly BlobServiceClient _blobServiceClient;

    public BlobOutputFunction(ILogger<BlobOutputFunction> logger, BlobServiceClient blobServiceClient)
    {
        _logger = logger;
        _blobServiceClient = blobServiceClient;
    }

    [Function("HttpToBlob")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
    {
        _logger.LogInformation("Received request to write to blob storage.");

        // 创建容器(若不存在)
        var containerClient = _blobServiceClient.GetBlobContainerClient("mycontainer");
        await containerClient.CreateIfNotExistsAsync();

        // 写入Blob内容
        var blobClient = containerClient.GetBlobClient($"{Guid.NewGuid()}.txt");
        string content = await new StreamReader(req.Body).ReadToEndAsync();
        await blobClient.UploadAsync(BinaryData.FromString(content), overwrite: true);

        var response = req.CreateResponse(System.Net.HttpStatusCode.OK);
        await response.WriteStringAsync("Content written to blob successfully.");
        return response;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:12:45