Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Forcing Function Parameter Value

Tags:

c#

I have the following function which makes a HTTP request and returns the response body as a string:

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();
}

The first parameter, method, can only have the general HTTP methods as values (GET, POST, PUT, DELETE).

To force the input to be one of these values, I know I would need to create an object, but the details are escaping me. Can anyone help out?

PS: I'm using 4.0 framework

like image 225
user1886415 Avatar asked Feb 10 '26 21:02

user1886415


1 Answers

To force the input to be one of these values, I know I would need to create an object,

How about an enum:

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

and then:

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();
    }
}

Also notice how I have fixed the flaw you had in the GetResponse code where you didn't dispose any of the IDisposable objects which could result in leaks and all kind of nasty stuff. For example if you don't dispose the response object it could result in timeouts if this method is called many times.

like image 104
Darin Dimitrov Avatar answered Feb 12 '26 18:02

Darin Dimitrov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!