2015-11-03 6 views
0

У меня есть веб-клиент, с которым я хочу связаться с несколькими поставщиками.Установить пользовательские заголовки для WebClient

Помимо ури и данных, есть также заголовки, которые следует учитывать, поскольку они могут отличаться от поставщика к поставщику. Окружая клиента, у меня много других вещей, поэтому я хочу написать этот код один раз.

Итак, я пытаюсь создать базовый метод, который имеет все основные функции - что-то вроде приведенного ниже примера - это позволит мне заполнить пробелы из вызывающей функции.

public string Post() 
    { 
     try 
     { 
      var client = new CustomWebClient(); 

      return client.UploadString("", ""); 
     } 
     catch (WebException ex) 
     { 
      switch (ex.Status) 
      { 
       case WebExceptionStatus.Timeout: 
        break; 
       default: 
        break; 
      } 

      throw new Exception(); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(); 
     } 
     finally 
     { 
      client.Dispose(); 
     } 
    } 

Очевидно, что это легко пройти в адреса и данных в качестве параметров, но как я могу установить заголовки с помощью client.Headers.Add() или что-то?

Я изо всех сил пытаюсь найти образец, который работает и не пахнет.

+0

Вы можете «client.Headers.Add» («test», «test»); ' –

ответ

2

Поскольку метод Post() является общедоступным методом CustomWebClient, было бы хорошим дизайном установить все необходимые свойства для сообщения метода через средства определения свойств или инициализацию конструктора.

public class CustomWebClient 
{ 
    public NameValueCollection Headers 
    { 
     get; 
     set; 
    } 

    public CustomWebClient() 
    { 
     this.Headers = new NameValueCollection(); 
    } 

    //Overload the constructor based on your requirement. 

    public string Post() 
    { 
     //Perform the post or UploadString with custom logic 
    }  

    //Overload the method Post for passing various parameters like the Url(if required) 
} 

В том месте, где в настоящее время используется CustomWebClient,

using (CustomWebClient client = new CustomWebClient()) 
{ 
    client.Headers.Add("HeaderName","Value"); 
    client.Post(); 
} 
+0

Звучит как план! –

1

Если число возможных заголовков ограничено, вы можете объявить их как public enum в вашем CustomWebClient классе и создать перегрузку либо constructor или UploadString() (в зависимости от того, что вам нравится) и передайте ему значение enum, чтобы соответствующим образом настроить заголовок. Пример:

public class CustomWebClient { 
    public enum Headers { StandardForm, Json, Xml } 

    public CustomWebClient() { 
    } 

    //This is your original UploadString. 
    public string UploadString(string x, string y) { 
     //Call the overload with default header. 
     UploadString("...", "...", Headers.StandardForm); 
    }  


    //This is the overloaded UploadString. 
    public string UploadString(string x, string y, Headers header) { 
     switch(header){ 
     case Headers.StandardForm: 
      client.Headers.Add("Content-Type","application/x-www-form-urlencoded"); 
      break; 
     case Headers.Json: 
      client.Headers.Add("Content-Type","text/json"); 
      break; 
     case Headers.Xml: 
      client.Headers.Add("Content-Type","text/xml"); 
      break; 
     } 
     //Continue your code. 
    }  
} 

Наиболее привлекательные преимущества использования enum устраняют возможные опечатки и дает вам Intelli-смысл, так что вам не нужно помнить, что ваши варианты.

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