Restful API 在邮递员中工作,C# 不工作 [Magento 集成]

问题描述 投票:0回答:2

我正在使用 RESTful API 与 Magento 2 集成。当我使用 postman 时,它的工作方式就像 charm,而在 C# 代码中,它返回“未经授权的 401”异常。

但是,它之前在 C# 代码中可以工作,但突然停止工作了。

我已经尝试了各种方法,我尝试了(WebRequest、HTTPClient 和 RESTsharp),但返回了相同的异常。

另外,我使用 Fiddler 4 来捕获和匹配请求,我使用 Fiddler 到 C# 插件来提取 C# 代码,我还使用 Postman 的 RESTsharp 代码返回相同的异常。

远程服务器返回错误:(401) 未经授权。

       //Calls request functions sequentially.
        private string MakeRequests()
        {
            HttpWebResponse response;

            if (Request_hatolna_co(out response))
            {
                //Success, possibly uses response.

                string responseText = ReadResponse(response);
                response.Close();
                return responseText;
            }
            else
            {
                //Failure, cannot use response.
                return "";
            }
        }

        private static string ReadResponse(HttpWebResponse response)
        {
            using (Stream responseStream = response.GetResponseStream())
            {
                Stream streamToRead = responseStream;
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                {
                    streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress);
                }
                else if (response.ContentEncoding.ToLower().Contains("deflate"))
                {
                    streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress);
                }

                using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8))
                {
                    return streamReader.ReadToEnd();
                }
            }
        }


        private bool Request_hatolna_co(out HttpWebResponse response)
        {
            response = null;

            try
            {
                //Create a request to URL.
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://MAGENTO.co/index.php/rest//V1/orders/items?searchCriteria[filter_groups][0][filters][0][field]=item_id&searchCriteria[filter_groups][0][filters][0][value]=1");

                //Set request headers.
                request.KeepAlive = true;
                request.Headers.Set(HttpRequestHeader.Authorization, "Bearer xxxxxxxxxxxxxxxxxxxxxx");
                request.Headers.Add("Postman-Token", @"1181fa03-4dda-ae84-fd31-9d6fbd035614");
                request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache");
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36";
                request.ContentType = "application/json";
                request.Accept = "*/*";
                request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
                request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.9,ar;q=0.8,la;q=0.7");
                request.Headers.Set(HttpRequestHeader.Cookie, @"store=default; private_content_version=f16533d4f181d42a1b3f386fa6d2cdf1");

                //Get response to request.
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException e)
            {
                //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found)
                if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response;
                else return false;
            }
            catch (Exception)
            {
                if (response != null) response.Close();
                return false;
            }

            return true;
        }
c# postman magento2 magento-rest-api
2个回答
0
投票

为什么C#代码中设置了Postman-Token?删除它然后尝试。


0
投票

问题出在 URL 中,Magento(服务器)管理员将其更改为 [HTTPS] 而不是 [HTTP]。

总结了 [Postman、Insomnia 或任何其他 API 应用程序] 与 C# 代码之间的区别,即 C# 不处理 [HTTP 与 HTTPs],而 API 应用程序可以处理它。

© www.soinside.com 2019 - 2024. All rights reserved.