Skip to main content
 首页 » 编程设计

c#之WPF 上的 PCL HttpWebRequest 用户代理

2024年02月20日26mfrbuaa

我在我的一个执行大量 WebRequests 的项目中使用 PCL。

我必须设置一个 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 Forms和WPF中,我需要使用方法来设置它,之前我这样做:

var request = (HttpWebRequest)WebRequest.Create(cUrlLogin); 
request.UserAgent = cUserAgent; 
request.Referer = cUrlHalo; 

但是 PCL 不允许这样做,当我尝试另一种方式时,它只会抛出错误:

Additional information: The 'User-Agent' header must be modified using the appropriate property or method.

我试过将 WINDOWS_FORMS 或 WPF 放在构建条件中,并使用 .UserAgent/.Referer 围绕设置它放置一个 if 语句,但无济于事.有没有人遇到过这个问题并找到了解决方法?

请您参考如下方法:

这是一个迟到的回复,但可能对您或其他访问者仍然有用。函数:

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);