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)。

要强制输入为这些值之一,我知道我需要创建一个对象,但细节让我无法理解。任何人都可以帮忙吗?

PS:我用的是4.0框架

4

1 回答 1

4

要强制输入为这些值之一,我知道我需要创建一个对象,

一个枚举怎么样:

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 回答