PCL HttpWebRequest User-Agent on WPF
本文关键字:WPF on User-Agent HttpWebRequest PCL | 更新日期: 2023-09-27 17:56:01
我正在我的一个项目中使用一个PCL
,该项目执行了很多WebRequests。
我必须设置用户代理,否则我的 API 将不接受调用。这在Windows Phone 8和Windows 8中很好,因为HttpWebRequest
具有Headers属性,因此您可以执行以下操作:
var request = (HttpWebRequest)WebRequest.Create(cUrlLogin);
request.Headers[HttpRequestHeader.UserAgent] = cUserAgent;
request.Headers[HttpRequestHeader.Referer] = cUrlHalo;
但是在 Windows 窗体和 WPF 中,我需要使用该方法来设置它,然后再这样做:
var request = (HttpWebRequest)WebRequest.Create(cUrlLogin);
request.UserAgent = cUserAgent;
request.Referer = cUrlHalo;
但是这是 PCL 不允许的,当我尝试另一种方式时,它只会抛出错误:
其他信息:"用户代理"标头必须使用适当的属性或方法进行修改。
我尝试将WINDOWS_FORMS
或WPF
放入构建条件中,并使用 .用户代理/.参考,但无济于事。有没有人遇到过这个问题并找到了解决方法?
这是一个较晚的回复,但可能对您或其他访问者仍然有用。该函数:
public void SetHeader(HttpWebRequest Request, string Header, string Value) {
// Retrieve the property through reflection.
PropertyInfo PropertyInfo = Request.GetType().GetProperty(Header.Replace("-", string.Empty));
// Check if the property is available.
if (PropertyInfo != null) {
// Set the value of the header.
PropertyInfo.SetValue(Request, Value, null);
} else {
// Set the value of the header.
Request.Headers[Header] = Value;
}
}
这将尝试设置一个属性,并在此之后默认为一个标头。使用示例:
// Initialize a new instance of the HttpWebRequest class.
HttpWebRequest Request = WebRequest.Create(Address) as HttpWebRequest;
// Set the value of the user agent.
SetHeader(Request, "User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)");
// Set the value of the referer.
SetHeader(Request, "Referer", Referer.AbsoluteUri);
我最终不得不创建 2 个代码几乎相同的库。一个库作为 Win32 的类库,一个作为 WinRT 的可移植类库。