【问题标题】:PCL HttpWebRequest User-Agent on WPFWPF 上的 PCL HttpWebRequest 用户代理
【发布时间】:2013-03-12 08:30:12
【问题描述】:

我在我的一个执行大量 WebRequest 的项目中使用 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 不允许这样做,当我尝试其他方式时,它只会抛出错误:

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

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

【问题讨论】:

    标签: c# httpwebrequest user-agent portable-class-library


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我相信在不久的将来我会需要使用它。
    • 这确实有效。网上有很多关于不可能的话题哈哈
    • 你有时髦的命名约定。
    • 确实是@MathiasLykkegaardLorenzen。谢天谢地,我已经继续前进了;-)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      相关资源
      最近更新 更多