如何从泛型方法返回错误

时间:2015-07-27 15:43:57

标签: windows-runtime windows-phone-8.1

标题没有很好地描述问题,所以让我解释一下我的问题。

我有一个通用函数来通过HTTP GET调用来使用API​​。看起来像这样:

public async static Task<T> GetAsync<T>(string Base_Url,string relative_URL, Utility.UriExtensions.NameValueCollection Params, Utility.UriExtensions.NameValueCollection headers = null)
    {
        Uri CompleteURL = new Uri(Base_Url + relative_URL, UriKind.Absolute);
        if (Params != null)
            CompleteURL = Utility.UriExtensions.CreateUriWithQuery(CompleteURL, Params);
        if(headers!=null)
        {
            foreach(KeyValuePair<string,string> k in headers)
            {
                if (ApiHttpClient.DefaultRequestHeaders.ContainsKey(k.Key))
                    ApiHttpClient.DefaultRequestHeaders[k.Key] = k.Value;
                else
                    ApiHttpClient.DefaultRequestHeaders.Add(k.Key, k.Value);
            }
        }

        Debug.WriteLine("GET : " + CompleteURL);
        using (var response = await ApiHttpClient.GetAsync(CompleteURL).AsTask(cancellationToken.Token).ConfigureAwait(false))
        {
            string responseData="";
            if (response.IsSuccessStatusCode)
            {
                responseData = await response.Content.ReadAsStringAsync();

                Debug.WriteLine(responseData);

                JsonSerializerSettings settings = new JsonSerializerSettings();
                settings.DateParseHandling = DateParseHandling.DateTime;
                settings.DefaultValueHandling = DefaultValueHandling.Populate;
                settings.NullValueHandling = NullValueHandling.Include;
                settings.TypeNameHandling = TypeNameHandling.None;
            }

            try
            {
                response.EnsureSuccessStatusCode();
                return JsonConvert.DeserializeObject<T>(responseData);
            }
            catch
            {
                // Error
                Debug.WriteLine(
                "Error occurred, the status code is: {0} and Content : {1}",
                response.StatusCode, response.Content);
            }
            return default(T);
        }
    } 

如果出现错误,则会在catch body内处理错误。我想在发生这种情况时返回StatusCode和响应内容等错误信息。但我无法对此通用功能进行任何更改。应该如何处理。

1 个答案:

答案 0 :(得分:0)

为此,您可以使用out参数,您将在方法中传递该参数:

public async static Task<T> GetAsync<T>(string Base_Url,string relative_URL, Utility.UriExtensions.NameValueCollection Params, Utility.UriExtensions.NameValueCollection headers = null, out StatusCode code)


StatusCode statusCode;
GetAsync<Foo>(..., out statusCode);