2013-10-17 224 views
0

我想使用谷歌API创建gmail用户帐户。我送JSON请求到服务器获取授权码,但我得到了httpwebresponse这些错误: -Json POST请求到服务器但服务器响应(400)错误请求

异常详细信息:System.Net.WebException:远程服务器返回错误:(400)错误的请求

var request = (HttpWebRequest)WebRequest.Create(@"https://accounts.google.com/o/oauth2/auth"); 
    request.Method = "POST"; 
    request.ContentType = "text/json"; 
    request.KeepAlive = false; 

    //request.ContentLength = 0; 

    using (StreamWriter streamWriter = new StreamWriter(request.GetRequestStream())) 
    { 
     string json = "{\"scope\":\"https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile\"," + "\"state\":\"%2Fprofile\"," + "\"redirect_uri\":\"http://gmailcheck.com/response.aspx\"," + "\"response_type\":\"code\"," + "\"client_id\":\"841994137170.apps.googleusercontent.com\"}"; 

     streamWriter.Write(json); 
     // streamWriter.Flush(); 
     //streamWriter.Close(); 
    } 
     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
     { 
      StreamReader responsereader = new StreamReader(response.GetResponseStream()); 

      var responsedata = responsereader.ReadToEnd(); 
      //Session["responseinfo"] = responsereader; 

      //testdiv.InnerHtml = responsedata; 
     } 

} 

回答

9

只要你得到一个异常,你必须从服务器读取实际的响应应该是有帮助的。就像一个错误描述或扩展状态代码...

比如:

try 
{ 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

     ... your code goes here.... 

} 
catch (WebException ex) 
     { 
     using (WebResponse response = ex.Response) 
     { 
      var httpResponse = (HttpWebResponse)response; 

      using (Stream data = response.GetResponseStream()) 
      { 
       StreamReader sr = new StreamReader(data); 
       throw new Exception(sr.ReadToEnd()); 
      } 
     } 
    } 
+1

非常感谢你。 .net不允许优雅地处理抛出异常的http错误响应insead。 – Fer

+0

这就是我所需要的;但是有没有办法捕获400/404状态码(一些JSON/REST在主体中使用有效的JSON发送这些代码)。我必须解析异常吗? – NealWalters

相关问题