401 執行執行 HttpWebRequest 的 C# 應用程式時發生身份验证錯誤

本文关键字:身份验证 程式時 HttpWebRequest | 更新日期: 2023-09-27 18:30:56

我想知道如何解决这个问题,其中在具有Windows身份验证的IIS 7/8上运行的WebApp在向另一个站点执行HttpWebRequest时抛出401错误。如果我在本地运行它,即调试模式,这个 WebApp 工作正常。

这是代码片段

HttpWebRequest webReq;
webReq = (HttpWebRequest)WebRequest.Create("http://sharepoint_site/_vti_bin/listdata.svc/mylist);
webReq.Accept = "application/json";
webReq.UseDefaultCredentials = true;
webReq.Credentials = CredentialCache.DefaultNetworkCredentials;
//webReq.Credentials = new NetworkCredential("user","password","domain");
webReq.Method = "GET";
webReq.KeepAlive = true;
Stream objStream = webReq.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();

我还能够通过在注册表中添加 BackConnectionHostNames 条目来使其工作

HKEY_LOCAL_MACHINE''系统''当前控制集''控制''Lsa''MSV1_0

但我需要传入我不喜欢的凭据(上面评论过),因为我不想使用我的帐户或任何服务帐户。

我希望 WebApp 使用 DefaultNetworkCredentials 或 DefaultCredentials。我在托管此 Web App 的计算机的 IIS 上启用了 Windows 身份验证和 NTLM 提供程序。

任何帮助将不胜感激,感谢和这个社区的更多力量。

401 執行執行 HttpWebRequest 的 C# 應用程式時發生身份验证錯誤

CredentialCache.DefaultNetworkCredentials使用运行进程的网络凭证。如果它在 IIS 中运行,它将是 Web 服务不接受的应用程序池标识。

您必须在代码中传递不同的凭据(您说您不想执行的操作)或更新应用程序池以使用网络凭据运行(右键单击 IIS ->高级设置 ->标识中的应用程序池)