2013-05-11 76 views
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(); 
} 

的第一個參數,方法,只能有一般HTTP方法作爲值(GET ,POST,PUT,DELETE)。

要強制輸入是這些值之一,我知道我需要創建一個對象,但細節正在逃避我。任何人都可以幫忙嗎?

PS:我使用的是4.0框架

+0

您可以使用'HttpMethod'類:http://msdn.microsoft.com/en-CA/library/system.net.http.httpmethod.aspx並使用它的'ToString'方法。 – Matthew 2013-05-11 18:51:12

+0

不幸的是,我使用4.0框架,而不是4.5 – user1886415 2013-05-11 18:58:17

+0

我的歉意,我認爲這件事從一開始就存在。 – Matthew 2013-05-11 18:59:11

回答

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對象。例如,如果您不處理響應對象,則可能會導致超時,如果多次調用此方法。

+0

我會命名該枚舉HttpMethod,除非它是一個標誌枚舉。 – mroach 2013-05-11 18:21:12

+0

@ mroach,好點,回答更新。 – 2013-05-11 18:21:38

+0

非常感謝!在IDisposable上有好的效果。 – user1886415 2013-05-11 18:29:16