相关文章推荐
光明磊落的啄木鸟  ·  Issue with REST API ...·  2 月前    · 
憨厚的黄瓜  ·  REST API | Quickwit 文档·  1 月前    · 
爱逃课的硬盘  ·  Spring Cloud Function ...·  3 周前    · 
谦和的墨镜  ·  Using @Autowired :: ...·  1 年前    · 
踏实的茄子  ·  清除adb ...·  1 年前    · 
欢快的拐杖  ·  C# ...·  2 年前    · 

I am trying to access rest api from c#.

When I use below url in browser I get the products data as json fine;

https://MyUsername:MyPassword@mydomain.com/wp-json/wc/v3/products?consumer_key=ck_12345678901234567890&consumer_secret=cs_12345678901234567890

When I use url

https://MyUsername:MyPassword@mydomain.com/wp-json/wc/v3/products

consumer_key = ck_12345678901234567890 and consumer_secret = cs_12345678901234567890

as Params in Postman then I get the products data as well. So the credentials and url are valid.

However when I try to do this using HttpWebRequest in c# it fails with "The remote server returned an error: (401) Unauthorized" exception. My c# code is below and the exception appears on the last line of code.

The values in HttpWebRequest before the GetResponseAsync call can be seen in attachment. 142366-httpwebrequest.pdf

What am I doing wrong?

Thanks

Regards

string wc_url = "https://MyUsername:MyPassword@mydomain.com/wp-json/wc/v3/products?consumer_key=ck_12345678901234567890&consumer_secret=cs_12345678901234567890";  
HttpWebRequest httpWebRequest = null;  
httpWebRequest = (HttpWebRequest)WebRequest.Create(wc_url);  
httpWebRequest.AllowReadStreamBuffering = false;  
WebResponse wr = await httpWebRequest.GetResponseAsync().ConfigureAwait(false);  
												

Hi 78669366,

Look at this it works in Postman and url, but not in C#..
Please let me know if it works.

Best Regards,
Jiale Xue

Thanks but using ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 did not seem to have work.

Regards

Entering the username and password in the the url is a browser feature. The browser removes the values from the url before making the request, and passes them as basic authentication headers.

So to convert to webclient, remove from url and use basic authentication.

Using RestSharp below worked fine.

        Dim client = New RestClient("https://mydomain.com/wp-json/wc/v3/products")
        client.Timeout = -1
        client.AddDefaultQueryParameter("consumer_key", "ck_12345678901234567890")
        client.AddDefaultQueryParameter("consumer_secret", "cs_12345678901234567890")
        client.Authenticator = New HttpBasicAuthenticator(MyUsername, MyPassword)
        Dim request = New RestRequest(Method.[GET])
        Dim response As IRestResponse = client.Execute(request)