使用WebClient获取网页内容时,由于网页存在自动跳转,这个时候我已经不知道我需要获取到跳转网页的完整Url,所以有了这个获取私有字段的值的需求。
WebClient有一个私有字段:m_WebRequest ,记录的最新的请求相关信息,通过它就能够获取到我想要的数据。
首先通过实例化对象的GetType函数,获取到当前实例化对象的类型。
MyWebClient,是一个继承自WebClient的自定义类,所以在反射的时候需要使用 type.BaseType;
通过类型的GetField函数可以获取到私有变量的值,这里要注意一点的是需要传入标志“BindingFlags.Instance | BindingFlags.NonPublic;”,GetField是一个重载函数,需要调用那个带两个参数的函数。
如果GetField返回的数据是null,那么说明哪一个步骤出现了问题,需要检查代码;如果GetField获取的数据不为null,那么就可以调用GetValue获取的私有字段的值了。
具体代码如下:
using(var _wc =new MyWebClient()){
var type = _wc.GetType();
BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;
var field= type.BaseType.GetField("m_WebRequest", flag);
var m_WebRequest = field.GetValue(_wc);
HttpWebRequest webRequest = m_WebRequest as HttpWebRequest;
//其它逻辑代码
}
网友评论