凭据正确时,无法与HttpClient连接

时间:2018-08-08 15:26:14

标签: c# azure dotnet-httpclient

我处于一种可以连接到端点(使用Postman chrome应用程序)的情况,但是当我尝试通过在Azure上以WebJob身份执行的HttpClient尝试连接到端点时,出现身份验证错误。

public  string ScanEndPoint()
        {
            string result;


            using (var client = new HttpClient())
            {
                var requestContent = new MultipartFormDataContent();

                var url = $"{Host}/{Path}";

                requestContent.Add(new StringContent("*"), Version);
                requestContent.Add(new StringContent("***"), Reference);
                requestContent.Add(new StringContent("********"), Password);
                var response =  client.PostAsync(url, requestContent).Result;
                result = response.Content.ReadAsStringAsync().Result;
            }
            return result;
        }

MultipartFormData是因为我必须在主体中而不是作为标题发布凭证。单击邮递员中的代码链接将显示:

POST /*************.php HTTP/1.1
Host: *****-*******.****.******
Cache-Control: no-cache
Postman-Token: b574e803-1873-d7dd-ff10-bfc509991342
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="*"

**
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="***"

****
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="*********"

********************************
------WebKitFormBoundary7MA4YWxkTrZu0gW--

我需要采取哪些步骤来复制该邮递员请求,以使其在代码中起作用?

1 个答案:

答案 0 :(得分:0)

这是我们要做的事情:

 using (var client = new HttpClient(handler: clientHandler, disposeHandler: true))
            {
                client.BaseAddress = new Uri(Host);

                var url = $"{Path}";
                var parameters = new Dictionary<string, string> {
                    { "V", Version },
                    { "ref", Reference },
                    { "password", Password }
                };

                var encodedContent = new FormUrlEncodedContent(parameters);

                var response = client.PostAsync(url, encodedContent).Result;
                result = response.Content.ReadAsStringAsync().Result;
            }
            return result;

处理程序为本地调试设置了代理,该代理在Azure上应该是无关紧要的,但是如果事实证明是错误的,我可以将其删除。

我阅读的有关此问题的大多数文章都建议使用与@Jayendran所指的方法相同的方法。有什么区别的想法吗?

注意:我们还必须重新安排主机和路径,以便主机以“ /”结尾