c# - 使用返回的实例?
问题描述
我有一个执行 API 请求的类层次结构。在基类中,我构建了请求对象,在一些子类中,这个方法被覆盖了。
基类:
protected virtual HttpRequestMessage BuildRequest(HttpMethod method, Uri uri, HttpContent content = null)
{
HttpRequestMessage request = new HttpRequestMessage(method, uri);
if (null != content)
{
request.Content = content;
}
return request;
}
子类:
protected async override HttpRequestMessage BuildRequest(HttpMethod method, Uri uri, HttpContent content = null)
{
HttpRequestMessage request = await base.BuildRequest(method, uri, content);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AccessTokenHelper.GetAccessToken());
return request;
}
然后使用 BuildRequest() 方法的其他方法中的语句:
using HttpRequestMessage request = BuildRequest(HttpMethod.Post, url, content);
如您所见,我是using
返回的实例。这是否也会正确处理HttpRequestMessage
每个方法中的实例BuildRequest()
?或者这是在数万次请求后的经典内存泄漏情况?
解决方案
如果您查看代码,则会创建一个实例:
HttpRequestMessage request = new HttpRequestMessage(method, uri);
其他 2 行仅获取对上面创建的实例的引用:
HttpRequestMessage request = await base.BuildRequest(method, uri, content);
using HttpRequestMessage request = BuildRequest(HttpMethod.Post, url, content);
因此,通过使用using HttpRequestMessage request = BuildRequest(HttpMethod.Post, url, content);
,您可以正确处理在基本BuildRequest
方法中创建的实例。
推荐阅读
- java - 将数据保存到文本文件中
- ibm-cloud-functions - 我可以将 Cloud Functions 操作的执行时间延长到一个半小时吗?
- docker - 检测到任务失败:docker service create --name db --network backend --mount type=volume,source=db-data,target=/var/lib/postgresql/data postgres
- sql - 将多个查询合二为一
- flutter - 如何在购买前选择多个套餐
- c# - C# Itext7 签名的 pdf 签名在 Foxit PDF Reqader 中无效,但在 Acrobat 阅读器中有效
- elasticsearch - 如何在多个 jdbc 插件行结果上只运行一次 jdbc_streaming 过滤器
- c - c中的父子共享缓冲区溢出
- angular - 使用 Angular 12 构建库包时超出最大调用堆栈大小
- python - 移动