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_FORMSWPF放入构建条件中,并使用 .用户代理/.参考,但无济于事。有没有人遇到过这个问题并找到了解决方法?

PCL HttpWebRequest User-Agent on 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 的可移植类库。