を実行する.dll
と書いています。 はそうするためには、私はこのクラスを作成しました:POSTとGET Libの問題
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」プロパティを使用して要求を設定するには、このLIBのユーザーのための方法です。
使用量がこのようなものになるだろう。そうした後
BDCWebRequests myInstance = new BDCWebRequests();
myInstance.InternalWebRequest.Referer = "refererUrl";
myInstance.AllowAutoRedirect = true;
myInstance.Host = "hostUrl";
、(ここでは例としてGETがある)Posts and Get Methods
がある
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"
ように論理的にそれを実装する方法の任意のアイデアを 2 - 以前に設定されたリクエストを使用して取得と送信を実行しますか?
ご迷惑をおかけして申し訳ありませんが、忍耐力に感謝します。 TL:DR :)
GETメソッドまたはPOSTメソッドの最後には、 同じURLで新しいリクエストを作成し、属性として保存されている古いリクエストを上書きしますか? また、私のHttpWebRequestのすべての属性を反復処理できる方法はありますか?私は "if(request.attrName!= null)にしてから新しいものにコピーしたくありません" –
リフレクションを使ってすべての属性を反復処理できます。具体的には、request.GetType()。GetProperties()メソッドを使用します。 – Svarog
また、ほとんどのWebRequestプロパティは単純にHTTPヘッダーなので、Headersプロパティをコピーすると、すでにほとんどの作業が完了しています。 – Svarog