将类中IHttpContextAccessor设为readonly是否会影响修改请求头?
问题解答
你将IHttpContextAccessor类型字段标记为readonly后,完全可以正常修改其内部的请求头内容,Sonar Cloud的检测建议是合理的。
原理说明
- C#中
readonly修饰引用类型字段的作用仅为限制字段本身的引用指向不可在构造函数之外修改,不会限制引用指向的对象内部的可变性。你在构造函数中给httpContextAccessor赋值后,只要后续没有重新给该字段赋值新的实例,就满足readonly的约束。 - 你之前的认知存在误区:修改请求头属于修改
httpContextAccessor指向的实例内部属性,根本没有改动httpContextAccessor字段本身的引用指向,因此完全符合readonly的使用规则,不会触发任何报错。
修正后的代码示例
public class Test { // 新增readonly修饰完全合法 private readonly IHttpContextAccessor httpContextAccessor; Test(IHttpContextAccessor httpContextAccessor) { this.httpContextAccessor = httpContextAccessor; } public void AddRequestHeadder() { // 该操作修改的是引用对象内部的Header集合,不受readonly限制 httpContextAccessor.HttpContext.Request.Headers.TryAdd("key", clientId); httpContextAccessor.HttpContext.Request.Headers.TryAdd("key1", clientSecret); } }
内容的提问来源于stack exchange,提问作者शेखर
相关产品推荐
相关产品推荐

