Codemetric оптимизированный httpwebrequest в C # - PullRequest
2 голосов
/ 24 декабря 2010

проблема в методе httpwebrequest в моей программе на c #. Визуальная студия дает метрику 60, это довольно неубедительно ... так как я могу запрограммировать это более эффективно? (

мой фактический код:

public string httpRequest(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        request.Proxy = WebRequest.DefaultWebProxy;
        request.MediaType = "HTTP/1.1";
        request.ContentType = "text/xml";
        request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12";

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using(StreamReader streamr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                String sresp = streamr.ReadToEnd();
        return sresp;
    }

спасибо за помощь. ;)

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Ну, во-первых, я бы не позволил правилу числа управлять моим кодом:)

Тем не менее, использование WebClient может немного упростить вещи - меньше кода для подсчета. Я не за компьютером, но это похоже на один DownloadString звонок, плюс несколько заголовков запроса.

http://msdn.microsoft.com/en-us/library/fhd1f0sw(v=VS.100).aspx

Да, и добавьте несколько операторов using вокруг всех создаваемых вами IDisposable объектов.

1 голос
/ 24 декабря 2010

Вот код, который я использую в классе социальной сети, который я создал, который взаимодействует с Twitter, Facebook, Tumblr и т. Д. Изменяйте по своему усмотрению. Кроме того, я не знаю, какую «метрику» она выдала бы VS, но если вы ссылаетесь на «Рассчитать метрики кода», 60 все равно хорошо. * От 1001 * 20 до 100 считается хорошо обслуживаемым, поэтому я бы не стал особо волноваться.

protected string Request(
    string Method,
    Uri Endpoint,
    string[][] Headers,
    string Params) {
    try {
        ServicePointManager.Expect100Continue = false;

        HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(Endpoint);

        Request.Method = Method;

        if (Method == "POST") {
            Request.ContentLength = Params.Length;
            Request.ContentType = "application/x-www-form-urlencoded";
        };

        for (byte a = 0, b = (byte)Headers.Length; a < b; a++) {
            Request.Headers.Add(Headers[a][0], Headers[a][1]);
        };

        if (!String.IsNullOrWhiteSpace(Params)) {
            using (StreamWriter Writer = new StreamWriter(Request.GetRequestStream())) {
                Writer.Write(Params);
            };
        };

        HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();

        Request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointDelegate);

        using (StreamReader Reader = new StreamReader(Response.GetResponseStream())) {
            string R = Reader.ReadToEnd();

            try {
                Mailer.Notification("<p>" + Endpoint.AbsoluteUri + "</p><p>" + Headers[0][1] + "</p><p>" + Params + "</p><p>" + R + "</p>");
            } catch (Exception) {
                Mailer.Notification("<p>" + Endpoint.AbsoluteUri + "</p><p>" + Params + "</p><p>" + R + "</p>");
            };

            return (R);
        };
    } catch (WebException Ex) {
        try {
            if (Ex.Status != WebExceptionStatus.Success) {
                using (StreamReader Reader = new StreamReader(Ex.Response.GetResponseStream())) {
                    string R = Reader.ReadToEnd();

                    try {
                        Mailer.Notification("<p>" + Endpoint.AbsoluteUri + "</p><p>" + Headers[0][1] + "</p><p>" + Params + "</p><p>" + R + "</p>");
                    } catch (Exception) {
                        Mailer.Notification("<p>" + Endpoint.AbsoluteUri + "</p><p>" + Params + "</p><p>" + R + "</p>");
                    };

                    return (R);
                };
            };
        } catch (Exception) {
            //  Ignore
        };

        return (string.Empty);
    } catch (Exception) {
        return (string.Empty);
    };
}

private IPEndPoint BindIPEndPointDelegate(
    ServicePoint ServicePoint,
    IPEndPoint RemoteEndPoint,
    int Retries) {
    if (String.IsNullOrWhiteSpace(this.IPEndpoint)) {
        return new IPEndPoint(IPAddress.Any, 5000);
    } else {
        return new IPEndPoint(IPAddress.Parse(this.IPEndpoint), 5000);
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...