3

HTTP 要求を作成し、応答本文を文字列として返す次の関数があります。

private string getResponseBody(string method, string partialUrl)
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_hostPath + partialUrl);
    req.ContentLength = 0;
    req.KeepAlive = false;
    req.Method = method;

    return new StreamReader(req.GetResponse().GetResponseStream()).ReadToEnd();
}

最初のパラメータ method には、一般的な HTTP メソッド (GET、POST、PUT、DELETE) のみを値として指定できます。

入力を強制的にこれらの値の 1 つにするには、オブジェクトを作成する必要があることはわかっていますが、詳細はわかりません。誰でも助けてもらえますか?

PS: 4.0 フレームワークを使用しています

4

1 に答える 1

4

入力を強制的にこれらの値の 1 つにするには、オブジェクトを作成する必要があることを知っています。

列挙型はどうですか:

public enum HttpMethod
{
    GET, 
    POST, 
    PUT, 
    DELETE
}

その後:

private string getResponseBody(HttpMethod method, string partialUrl)
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_hostPath + partialUrl);
    req.ContentLength = 0;
    req.KeepAlive = false;
    req.Method = method.ToString();

    using (var response = req.GetResponse())
    using (var stream = response.GetResponseStream())
    using (var reader = new StreamReader(stream))
    {
        return reader.ReadToEnd();
    }
}

また、GetResponse コードで発生した IDisposable オブジェクトを破棄しなかったため、リークやあらゆる種類の厄介な問題が発生する可能性があるという欠陥をどのように修正したかにも注目してください。たとえば、応答オブジェクトを破棄しないと、このメソッドが何度も呼び出されるとタイムアウトになる可能性があります。

于 2013-05-11T18:20:19.547 に答える