簡體   English   中英

如何獲取返回 Http 狀態代碼 406 或 400 的 API 的響應 JSON

[英]How to get response JSON of an API which returns Http Status Code 406 or 400

Postman 返回一些帶有 HTTP 狀態代碼 406 的響應 JSON,但我用 C# 編寫的代碼返回相同的 HTTP 狀態代碼錯誤消息,但來自 Catch Block。

我的要求是

我使用的 API 總是返回一些響應 JSON,HTTP 狀態代碼 200 或 400 或任何其他。 當我從郵遞員那里測試這些 API 時,它顯示響應 JSON,但當我執行以下行時,我的代碼返回錯誤。

HttpWebResponse 響應 = (HttpWebResponse)request.GetResponse();

這是我的完整方法。

private Dictionary<string, string> HTTPCall(CRMRequestData requestData, out bool isError, out string errorMessage)
        {
            isError = true;
            errorMessage = "HTTPCall - initial error!";
            try
            {
                ServicePointManager.SecurityProtocol = TLS12;

                Dictionary<string, string> responseBag = new Dictionary<string, string>();
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestData.Uri);
                
                request.Method = requestData.HttpMethodName;
                request.ContentType = requestData.ContentType;
                request.ContentLength = string.Format("{0}", requestData.Body).Length;
                request.Headers.Add("x-api-key", requestData.APIKey);
                if (requestData.Authorization != null)
                {
                    request.Headers.Add("Authorization", string.Format("JWT {0}",requestData.Authorization));
                }

                if (requestData.HttpMethodName.ToUpper().Equals("POST"))
                {
                    string body = requestData.Body;
                    Byte[] bytes = Encoding.UTF8.GetBytes(body);
                    using (Stream stream = request.GetRequestStream())
                    {
                        stream.Write(bytes, 0, bytes.Length);
                    }
                }

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();//#Error at this line

                
                string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();

                if (responseData != null && responseData != "")
                {
                    responseBag = ReadResponseJSON(responseData, requestData.CRMMethod, out isError, out errorMessage);
                }

                errorMessage = (!isError) ? "HTTPCall - API executed successfully!" : errorMessage;
                return responseBag;
            }
            catch (Exception ex)
            {
                isError = true;
                errorMessage = string.Format("{0}", ex.Message);
            }
            return null;
        }

*注意: -當 API 返回 HTTP 狀態代碼 200 或 201 時,我的代碼塊工作正常

在此處輸入圖片說明

試試這個: 什么是 HTTP 中的“406-Not Acceptable Response”?

簡而言之:為 Service 返回的響應(內容類型)添加 Accept 標頭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM