处理返回HttpWebResponse的方法中的错误

时间:2016-06-15 08:02:21

标签: c#

我有这个类,我可以使用不同的Request方法(GET,POST等)向不同的路径发出请求。

我刚刚添加trycatch来记录错误,但是我不知道如何处理catch块?我无法返回一个空的HttpWebResponse。 "Not intended to be used directly from the code"

private static HttpWebResponse HttpRequest(string method, string path)
{
    try
    {
        var httpWebRequest =
            (HttpWebRequest) WebRequest.Create(ConfigurationManager.AppSettings["server"] + path);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = method;
        httpWebRequest.Credentials =
            new NetworkCredential(ConfigurationManager.AppSettings["username"],
                ConfigurationManager.AppSettings["password"]);
        httpWebRequest.PreAuthenticate = true;

        return (HttpWebResponse) httpWebRequest.GetResponse();
    }
    catch (Exception e)
    {
        Logger.Error(e, "HttpRequest error");
    }
}

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

相反,您可以返回HttpResponseMessage,并在catch (Exception ex)返回类似这样的内容:

var response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
    Content = new StringContent(string.Join(
        Environment.NewLine,
        ex.GetType().FullName,
        ex.Message))
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
return response;

(设置ContentTypeContent以符合您的目的)

答案 1 :(得分:1)

你可以重新抛出错误,将责任推到链上。

catch (Exception e)
{
    Logger.Error(e, "HttpRequest error");
    throw;
}

或者您可以返回null

catch (Exception e)
{
    Logger.Error(e, "HttpRequest error");
    return null;
}

答案 2 :(得分:1)

不要抓住一般Exception - 而是抓住可能包含WebException的{​​{1}}。否则,只需在记录后重新抛出错误。

Response