POST и GET Lib Issue - PullRequest
       0

POST и GET Lib Issue

2 голосов
/ 09 января 2012

Я пишу .dll, который будет выполнять Gets and Posts. Для этого я создал этот класс:

public class BDCWebRequests
{
    // private attributes
    private static CookieContainer m_CookieJar;
    private static HttpWebRequest  m_HttpWebRequest;
    private static string          m_defaultUserAgent      = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1";
    private static string          m_defaultContentType    = "application/x-www-form-urlencoded";

    // Public Properties
    public HttpWebRequest InternalWebRequest
    {
        get { return m_HttpWebRequest; }
    }

    /// <summary>
    /// Class Constructor
    /// </summary>
    public BDCWebRequests()
    {
        m_CookieJar = new CookieContainer();
    }

   // Methods Come Here...
}

Я пытаюсь добиться того, чтобы пользователь этой библиотеки правильно сконфигурировал запрос, используя свойство InternalWebRequest.

Использование будет примерно таким:

BDCWebRequests myInstance = new BDCWebRequests();
myInstance.InternalWebRequest.Referer = "refererUrl";
myInstance.AllowAutoRedirect          = true;
myInstance.Host                       = "hostUrl";

После этого есть Posts and Get Methods (Вот пример GET в качестве примера)

 public string Get(string url)
    {
        try
        {
            // Creating instance of HttpWebRequest based on URL received
            m_HttpWebRequest = (HttpWebRequest) WebRequest.Create (url);

            m_HttpWebRequest.Method                        = "GET";
            m_HttpWebRequest.UserAgent                     = m_defaultUserAgent;

            // Execute web request and wait for response
            using (HttpWebResponse resp = (HttpWebResponse) m_HttpWebRequest.GetResponse())
            {
              return new StreamReader(resp.GetResponseStream()).ReadToEnd();
            }

        }
        catch (Exception ex)
        {
            LogWriter.Error(ex);
        }

        return String.Empty;
    } 

Использование:

myInstance.Get("UrlForTheRequest");

Основной выпуск: У меня проблема, когда пользователь выполняет GET или POST, и после этого он пытается изменить любой атрибут внутреннего экземпляра HttpWebRequest с помощью открытого свойства.

Если пользователь вызывает GET, например, и после этого он пытается:

myInstance.InternalWebRequest.Host = "", например, выдает ошибку: "this property cannot be set after writing has started"

Любая идея о том, как логически реализовать ее, чтобы пользователь мог:

1 - настроить запрос в любом месте, в любое время, не получая эту ошибку 2 - Выполнить получение и сообщения с использованием ранее настроенного запроса?

Извините за этот длинный вопрос, заранее спасибо за терпение. Пожалуйста, не TL: DR:)

1 Ответ

1 голос
/ 09 января 2012

Простой: в момент отправки запроса прочитайте все необходимые данные из ответа, а затем создайте новый запрос и скопируйте в него все соответствующие параметры из старого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...