动态添加属性到HttpWebRequest

时间:2013-02-11 12:50:13

标签: c# dynamic properties webrequest

我有一个C#Windows窗体应用程序,我用它连接到服务器来制作Web请求。我需要做的是允许用户通过首选项设置某些属性,并动态地将这些属性添加到WebRequest。

就像我有一个带有条目的配置文件 - >

<Properties>
        <Property name="User-Agent" value="Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" />
        <Property name="KeepAlive" value="true" />
</Properties>

现在我想将值绑定到WebRequest Properties。

Uri serverURL = new Uri("http://MyServer:8080/MyPage.jsp");
        HttpWebRequest wreq = WebRequest.Create(serverURL) as HttpWebRequest;
        XmlDocument xmldoc = new XmlDocument();
        xmldoc.Load(<Path of Config>);
        XDocument xDoc = XDocument.Parse(xmldoc.InnerXml);
        Dictionary<string, string> propdict = new Dictionary<string, string>();
        foreach (var section in xDoc.Root.Elements("Property"))
        {
            propdict.Add(section.Attribute("name").Value, section.Attribute("value").Value);
        }            

        string key = string.Empty, value = string.Empty;
        foreach (var item in propdict)
        { 
             //... add the properties to wreq
        }

有人可以告诉我这是如何实现的吗?

由于

Sunil Jambekar

1 个答案:

答案 0 :(得分:2)

听起来您想要添加http请求标头,在这种情况下:

wreq.Headers.Add(headerName, headerValue);

然而! IIRC,许多标题都是特殊标题,例如它可能拒绝接受用户代理作为标题,而是坚持你设置:

wreq.UserAgent = userAgentString;
wreq.KeepAlive = setKeepAlive;

所以你可能需要:

foreach(var item in propdict) {
    switch(item.Name) {
        case "User-Agent":
            wreq.UserAgent = item.Value;
            break;
        case "KeepAlive":
            wreq.KeepAlive = bool.Parse(item.Value);
            break;
        // ... etc

        default:
            wreq.Headers.Add(item.Name, item.Value);
            break;
    }
}

(您可能也想考虑区分大小写)