1

我在我的PCL一个项目上使用了一个做很多 WebRequests 的项目。

我必须设置一个 UserAgent 否则我的 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 不允许这样做,当我尝试另一种方式时,它只会抛出错误:

附加信息:必须使用适当的属性或方法修改“User-Agent”标头。

我已经尝试在构建条件中放置WINDOWS_FORMSWPF,并使用.UserAgent/.Referer 放置一个if 语句来设置它,但无济于事。有没有人遇到这个并找到解决方法?

4

2 回答 2

4

这是一个较晚的响应,但可能对您或其他访问者仍然有用。功能:

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);
于 2013-03-12T00:30:12.813 回答
0

我最终只需要创建 2 个几乎相同代码的库。一个库作为 Win32 的类库和 WinRT 的可移植类库。

于 2013-01-26T22:29:30.347 回答