OData Client 8.x废弃Credentials属性后如何配置凭据?
适用于OData Client 8.x的凭据配置方案
针对Unchase Connected Service生成的OData容器,结合OData Client 8.x的变更,推荐以下两种凭据配置方式:
方法一:直接构造带凭据的HttpClient(简单场景)
直接创建配置好凭据的HttpClientHandler和HttpClient,传入容器构造函数:
// 初始化带默认网络凭据的HttpClientHandler var httpHandler = new HttpClientHandler { Credentials = CredentialCache.DefaultNetworkCredentials }; // 基于handler创建HttpClient var odataHttpClient = new HttpClient(httpHandler); // 初始化Unchase生成的Container var _dataContext = new Container(new Uri(url), odataHttpClient);
这种方式无需依赖注入框架,适合控制台应用或小型项目快速配置。
方法二:使用IHttpClientFactory(推荐,适合.NET Core/.NET 5+项目)
遵循.NET最佳实践,利用IHttpClientFactory管理HttpClient生命周期并统一配置凭据:
1. 注册并配置HttpClient
在项目的依赖注入配置中(如Program.cs),注册并配置针对Container的HttpClient:
builder.Services.AddHttpClient<Container>(client => { // 设置OData服务的基础地址 client.BaseAddress = new Uri(url); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { // 配置所需凭据 Credentials = CredentialCache.DefaultNetworkCredentials });
2. 依赖注入使用Container
在需要使用OData容器的类中,通过构造函数注入Container:
public class ODataDataService { private readonly Container _dataContext; public ODataDataService(Container dataContext) { _dataContext = dataContext; } // 示例:执行OData查询 public async Task<IEnumerable<Entity>> GetEntitiesAsync() { return await _dataContext.Entities.ToListAsync(); } }
这种方式由框架管理HttpClient的创建和回收,避免手动管理可能导致的资源泄漏,同时便于在项目中统一调整HTTP请求配置。
注意事项
确保你使用的Unchase Connected Service是最新版本,它会生成兼容OData Client 8.x的Container类,包含接受HttpClient参数的构造函数。如果没有,可更新Unchase工具重新生成代码。
内容的提问来源于stack exchange,提问作者Tomas Paul
相关产品推荐
相关产品推荐

