Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 401在C中通过Azure流量管理器连接到API时未经授权#_C#_Webclient_Azure Traffic Manager - Fatal编程技术网

C# 401在C中通过Azure流量管理器连接到API时未经授权#

C# 401在C中通过Azure流量管理器连接到API时未经授权#,c#,webclient,azure-traffic-manager,C#,Webclient,Azure Traffic Manager,我有以下代码成功地连接到C#中的第三方API: 当直接连接到API时,这可以正常工作。然而,我正试图利用Azure Traffic Manager将负载分散到多个端点,在这样做时,我会收到401个未经授权的异常。使用诸如Postman和在请求中配置基本身份验证之类的工具,它似乎可以正常工作 我试图将代码转换为RestSharp,但它似乎有相同的症状 以下是Fiddler使用几种不同技术提出的请求: C#/WebClient直接连接到API端点(成功) 获取HTTP/1.1 主持人: 连接:保持活

我有以下代码成功地连接到C#中的第三方API:

当直接连接到API时,这可以正常工作。然而,我正试图利用Azure Traffic Manager将负载分散到多个端点,在这样做时,我会收到401个未经授权的异常。使用诸如Postman和在请求中配置基本身份验证之类的工具,它似乎可以正常工作

我试图将代码转换为RestSharp,但它似乎有相同的症状

以下是Fiddler使用几种不同技术提出的请求:

C#/WebClient直接连接到API端点(成功)

获取HTTP/1.1
主持人:
连接:保持活力
401未经授权
获取HTTP/1.1
授权:基本
主持人:
C#/WebClient到Azure流量管理器(401未经授权)

获取HTTP/1.1
主持人:
401未经授权
获取HTTP/1.1
主持人:
邮递员至Azure流量管理器(成功)

获取HTTP/1.1
主持人:
连接:保持活力
授权:基本
缓存控制:没有缓存
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/58.0.3029.110 Safari/537.36
邮递员代币:13396800-33ab-8d7b-664f-68b99e8f4ac1
接受:*/*
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8
302重定向
获取HTTP/1.1
主持人:
连接:保持活力
授权:基本
缓存控制:没有缓存
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/58.0.3029.110 Safari/537.36
邮递员代币:13396800-33ab-8d7b-664f-68b99e8f4ac1
接受:*/*
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8
Cookie:JSESSIONID=

我没有正确处理Azure流量管理器的重定向

答案如下:


我没有正确处理Azure流量管理器的重定向

答案如下:


您能否使用Fiddler等工具捕获传出请求,并将其与成功的邮递员请求进行比较?@NWard补充道。如果我不得不大胆猜测的话,当通过traffic manager使用C#/WebClient时,它试图对一个不同于原始主机的主机进行身份验证。邮递员似乎急切地在初始请求中发送授权标头。您能否使用例如Fiddler捕获传出请求,并将其与成功的邮递员请求进行比较?@NWard补充道。如果我不得不大胆猜测的话,当通过traffic manager使用C#/WebClient时,它试图对一个不同于原始主机的主机进行身份验证。邮递员似乎急切地在初始请求中发送授权标头。
using (var client = new WebClient())
{
    client.Credentials = new NetworkCredential(login.Username, login.Password);

    var xml = client.DownloadString(url);
    Debug.Write(xml);
}
GET <ApiUrl> HTTP/1.1
Host: <ApiHost>
Connection: Keep-Alive

401 Unauthorized

GET <ApiUrl> HTTP/1.1
Authorization: Basic <AuthToken>
Host: <ApiHost>
GET <TrafficManagerApiUrl> HTTP/1.1
Host: <TrafficManagerApiHost>

401 Unauthorized

GET <ApiUrl> HTTP/1.1
Host: <ApiHost>
GET <TrafficManagerApiUrl> HTTP/1.1
Host: <TrafficManagerApiHost>
Connection: keep-alive
Authorization: Basic <AuthToken>
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8


302 Redirect

GET <ApiUrl> HTTP/1.1
Host: <ApiHost>
Connection: keep-alive
Authorization: Basic <AuthToken>
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=<jsessionid>