2013-02-11 3 views
1

У меня есть приложение форм Windows C#, которое я использую для подключения к серверу для создания веб-запроса. Что мне нужно сделать, так это разрешить пользователю устанавливать определенные свойства с помощью настроек и динамически добавлять эти свойства в WebRequest.Динамическое добавление свойств к HttpWebRequest

Как, если у меня есть конфигурационный файл с записью ->

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

Теперь я хотел бы, чтобы связать значения WebRequest свойств.

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 
     } 

Может кто-нибудь, пожалуйста, дайте мне знать, как это можно достичь?

Благодаря

Сунил Jambekar

+0

'if (name ==" User-Agent ") {request.UserAgent = значение; } '? – dtb

ответ

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

(вы также можете подумать о чувствительности к регистру)

+0

Спасибо большое Marc .... Это точно код, который я написал, однако я не доволен этим. Я думал, что может быть что-то, что я могу применить динамически. User-Agent и KeepAlive не работают, если я делаю это через заголовки. – Sunil

Смежные вопросы