9

我正在使用 Asp.net web api 构建 web 服务,并且我必须从 AXIS IP 摄像机获取图像。但是,相机使用 Digest 身份验证。所以我的 C# 代码看起来像这样:

            WebClient webClient = new WebClient();
            webClient.UseDefaultCredentials = true;
            webClient.Credentials = new NetworkCredential("***", "***");
            byte[] imageStream = webClient.DownloadData("http://192.168.0.90/axis-cgi/jpg/image.cgi");

这一切都行得通,但是在查看 Fiddler 时,我发现客户端发送一个请求而无需身份验证,并返回 401 错误。之后,它会发送具有摘要安全性的邮件。

我在这里找到了手动凭据注入​​的解决方案:

http://kristofmattei.be/2013/02/20/webclient-not-sending-credentials-heres-why/

但这看起来不对。它使用基本身份验证,我真的不想要,而且看起来有点不专业。

有什么方法可以立即发送签名的请求,还是因为我注意到相机在第一个请求中返回了随机数,所以这是如何工作的?

4

1 回答 1

8

您无法避免第一个匿名请求,因为 WebClient 必须根据他收到的 401 响应来确定使用了哪种身份验证方案,它可能是基本的、摘要的等……请参阅那个问题

使用摘要,您无论如何都无法避免 2 个请求,因为第一个 401 响应包含一个随机数(客户端身份验证请求所需的值),请参阅摘要访问身份验证,维基百科

如果它是基本身份验证,您可以通过使用您的凭据手动设置所需的标头来避免第一个请求。

于 2013-06-10T13:47:03.567 回答