我处于一种可以连接到端点(使用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--
我需要采取哪些步骤来复制该邮递员请求,以使其在代码中起作用?
答案 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所指的方法相同的方法。有什么区别的想法吗?
注意:我们还必须重新安排主机和路径,以便主机以“ /”结尾