【问题标题】:Json POST request to the server but server respond (400) Bad RequestJson POST 请求到服务器但服务器响应(400)错误请求
【发布时间】:2013-10-17 08:23:29
【问题描述】:

我想使用 google api 创建 gmail 用户帐户。我正在向服务器发送 JSON 请求以获取授权代码,但我在 httpwebresponse 中收到这些错误:-

异常详情:System.Net.WebException:远程服务器返回错误:(400) Bad Request

    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;
        }

}

【问题讨论】:

    标签: c# json post httpwebrequest httpwebresponse


    【解决方案1】:

    一旦你得到一个异常,你必须从服务器读取实际响应,应该有一些有用的东西。像错误描述或扩展状态代码...

    例如:

    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());
                }
            }
        }
    

    【讨论】:

    • 非常感谢。遗憾的是,.net 不允许优雅地处理 http 错误响应而不是抛出异常。
    • 这是我需要的;但是有没有办法捕获 400/404 状态代码(一些 JSON/REST 在正文中发送这些代码并带有有效的 JSON)。我必须解析异常吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多