Я пишу .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:)