如何忽略/跳过/处理HttpWebResponse错误并仍然将JSON返回到我的代码?

时间:2014-11-16 21:30:59

标签: c# asp.net json api httpwebresponse

我正在尝试通过C#及其API设置对Stripe的调用。我使用以下代码通过帖子将新卡添加到他们的API并使用JSON响应来确定下一步

(我试图删除所有不必要的东西)

public static string stripeAPIcall(string customerId, string parameters, string stripeApiKey) {
    using (var stripeAPI = new System.Net.WebClient())
    {
      try
      {
        // set credentials
        stripeAPI.Credentials = new System.Net.NetworkCredential(stripeApiKey, "");

        //Set Headers
        stripeAPI.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
        stripeAPI.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

        return stripeAPI.UploadString("https://api.stripe.com/v1/customers/" + customerId + "/cards, parameters);
    }
    catch (WebException ex)
    {   
        return "error";
    }
  }
}

当成功时,这可以很好地创建一张卡片。但是,如果有错误,例如

  

我使用Stripes" card_declined"测试卡号4000000000000002

结果是带有以下JSON结构的402错误

{
  "error": {
    "message": "Your card was declined.",
    "type": "card_error",
    "code": "card_declined"
  }
}

这会破坏我的C#代码,因为402错误返回

  

System.Net.WebException:远程服务器返回错误:(402)需要付款。 System.Net.WebClient.UploadString上的System.Net.WebClient.UploadString(Uri地址,字符串方法,字符串数据)处的System.Net.WebClient.UploadDataInternal(Uri地址,字符串方法,字节[]数据,WebRequest和请求) (字符串地址,字符串数据)ASP.StripeGlobalHelpers.stripeAPIcall(String url,String parameters,String stripeApiKey,Boolean post)

那么,我如何忽略/跳过/处理402错误并仍然将JSON返回到我的应用程序? 我希望能够告诉用户"您的卡已被拒绝"或者我可以从条带获得的任何其他错误消息。

如果您需要更多信息,请告诉我们。

1 个答案:

答案 0 :(得分:4)

您可以使用以下异常处理程序

catch (WebException ex)
{
    var response = ex.Response.GetResponseStream();
    return response == null ? null : new StreamReader(response).ReadToEnd();
}

这将返回例如。

{
  "error": {
    "type": "invalid_request_error",
    "message": "Invalid API Key provided: ftw?!1"
  }
}