. net WebClient不首先进行身份验证就发送请求

本文关键字:身份验证 请求 WebClient net | 更新日期: 2023-09-27 18:17:48

我正在用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/

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

是否有任何方法可以立即发送签名请求,或者这是如何工作的,因为我注意到相机在第一个请求中返回nonce ?

. net WebClient不首先进行身份验证就发送请求

您无法避免第一个匿名请求,因为WebClient必须根据他得到的401响应找出使用的身份验证方案,它可能是基本的,摘要的,等等…看这个问题

使用摘要,无论如何都无法避免2个请求,因为第一个401响应包含nonce(客户端身份验证请求所需的值),参见摘要访问身份验证,Wikipedia。

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