首页 > 解决方案 > C# - 如果出现错误 400,我如何获得 JSON 响应?(HttpRequest)

问题描述

有时我会收到错误代码 400,例如当我尝试使用错误密码登录时。在其他 API(python)上它返回状态代码,那么我怎样才能从服务器获得实际响应?

编辑:我的代码:headers.cs:

public string Postheaders(string url, string data, string deviceID, string deviceID_sig, string userAgent)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.Headers["NDCDEVICEID"] = deviceID;
    request.Headers["NDC-MSG-SIG"] = deviceID_sig;
    request.Headers["Accept-Language"] = "en-US";
    request.UserAgent = userAgent;
    request.Host = "service.narvii.com";
    request.ContentType = "application/json; charset=utf-8";
    request.ContentLength = data.Length;
    var requestStream = request.GetRequestStream();
    using (var streamWriter = new StreamWriter(requestStream))
    {
        streamWriter.Write(data);
    }
    var webResponse = (HttpWebResponse)request.GetResponse();
    var webStream = webResponse.GetResponseStream();
    var responseReader = new StreamReader(webStream);
    var response = responseReader.ReadToEnd();
    return response;
}

客户端.cs

public string Login(string email, string password)
{
    var deviceinfo = new device();
    var headers = new headers();
    string data = new JavaScriptSerializer().Serialize(new
    {
        email = email,
        v = 2,
        secret = string.Format("0 {0}", password),
        deviceID = deviceinfo.deviceID,
        clientType = 100,
        action = "normal",
        timestamp = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds * 1000
    });
    string response = headers.Postheaders(string.Format("{0}/g/s/auth/login", api), data, deviceinfo.deviceID, deviceinfo.deviceID_sig, deviceinfo.userAgent);
    return response;
}

标签: c#

解决方案


尝试这个,

  JObject o1 = JObject.Parse(@"{
                    'status': 0, 'code':400, 'message':'bad request'
                    }");
  JObject o2 = JObject.Parse(jobject);
  o1.Merge(o2, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat });
  return Request.CreateResponse(o1);

推荐阅读