Azure Function调用System.Web.HttpUtility时程序集加载失败求助
问题解决:Azure Function使用System.Web.HttpUtility导致程序集加载失败
问题原因
System.Web.HttpUtility是.NET Framework专属类库,而Azure Function基于.NET Core/.NET 5+运行时,该环境不默认包含System.Web相关依赖,强行调用会触发找不到System.Collections.Specialized等依赖程序集的错误。
解决方案:改用.NET Core原生API
替换System.Web.HttpUtility.ParseQueryString的用法,使用.NET Core生态下的原生方法:
1. 解析请求自带的查询参数
如果要获取当前HTTP请求的查询参数,直接使用传入的HttpRequest req对象的Query属性即可:
// 获取单个参数 var param1 = req.Query["param1"]; // 遍历所有参数 foreach (var keyValuePair in req.Query) { log.LogInformation($"{keyValuePair.Key}: {keyValuePair.Value}"); }
2. 解析自定义查询字符串
如果需要解析自定义的查询字符串(非请求自带),使用Microsoft.AspNetCore.WebUtilities.QueryHelpers类:
- 先确保项目已安装
Microsoft.AspNetCore.WebUtilitiesNuGet包 - 修改代码如下:
using MasterProbaterRepo; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.WebUtilities; // 添加该命名空间 using Newtonsoft.Json; using System.Threading.Tasks; namespace MyNamespaceApi { public static class MyPoco { private static IMyPocoService _repo = new MongoRepo(); [FunctionName("GetMyPoco")] public static async Task<IActionResult> GetMyPocoAsync([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "myPoco")] HttpRequest req, ILogger log) { // 解析自定义查询字符串,支持带或不带前缀? var queryCollection = QueryHelpers.ParseQuery("?param1=aaa¶m2=bbb"); var param1 = queryCollection["param1"]; var param2 = queryCollection["param2"]; var myPoco = await _repo.GetMyPocoAsync(); var json = JsonConvert.SerializeObject(myPoco); return new OkObjectResult(json); } } }
3. 安装依赖包(若未安装)
如果项目中没有Microsoft.AspNetCore.WebUtilities,通过NuGet安装:
Install-Package Microsoft.AspNetCore.WebUtilities
或者在项目的.csproj文件中添加引用:
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="7.0.11" />
(版本号请匹配你的Azure Function所使用的.NET版本)
内容的提问来源于stack exchange,提问作者inliner49er
相关产品推荐
相关产品推荐

