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

Azure Durable Functions活动无法接收Uri类型参数问题

Azure Durable Functions (.NET Isolated) Uri类型Activity参数转换异常解决办法

当在.NET Isolated 7.0环境下使用Azure Durable Functions,传递Uri类型参数给Activity函数时,会抛出异常:

Cannot convert input parameter 'url' to type 'System.Uri' from type 'System.String'.

这是因为Orchestrator与Activity之间的参数通过序列化传递,默认的System.Text.Json序列化器会将Uri对象转为字符串,但Activity触发器无法自动将字符串反序列化为Uri类型。

解决办法

方法一:传递字符串并手动转换(推荐,简单直接)

修改Orchestrator代码,将Uri转为字符串传递;在Activity内部将字符串转换回Uri:

Orchestrator代码修改:

[Function("OrchestratorAsync")]
public async Task<string> OrchestratorAsync([OrchestrationTrigger] TaskOrchestrationContext context)
{
    Uri uri = new Uri("https://test/sample.txt");
    // 传递Uri的字符串表示
    var result = await context.CallActivityAsync<string>("ActivityAsync", uri.ToString());
    return result;
}

Activity代码修改:

[Function("ActivityAsync")]
public async Task<string> ActivityAsync([ActivityTrigger] string urlString)
{
    if (Uri.TryCreate(urlString, UriKind.Absolute, out Uri url))
    {
        Console.WriteLine(url);
        return "result";
    }
    // 处理无效URL的情况
    throw new ArgumentException("提供的URL格式无效", nameof(urlString));
}

方法二:自定义序列化配置(适合需要保持Uri类型传递的场景)

如果需要直接传递Uri对象,可以替换Durable Task的序列化器为Newtonsoft.Json(默认支持Uri类型的序列化/反序列化)。需要在项目中添加对应包,并在Program.cs中配置:

添加依赖包:

<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask.NewtonsoftJson" Version="1.0.0" />

Program.cs配置:

builder.Services.AddDurableTask(options =>
{
    options.UseNewtonsoftJson();
});

配置后,原代码无需修改即可直接传递Uri参数。

适配依赖版本

你的项目使用的依赖版本:

  • Microsoft.Azure.Functions.Worker Version="1.10.0"
  • Microsoft.Azure.Functions.Worker.Extensions.DurableTask Version="1.0.0"
  • Microsoft.Azure.Functions.Worker.Sdk Version="1.7.0"

以上两种方法均适配当前版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:22:20