运行C#应用程序执行HttpWebRequest时出现401身份验证错误

时间:2016-01-19 15:05:20

标签: c# iis sharepoint http-status-code-401

我想知道如何解决此问题,其中在使用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 \ SYSTEM \ CURRENTCONTROLSET \控制\ LSA \ MSV1_0

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

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

任何帮助都将非常感谢,感谢并为这个社区带来更多力量。

1 个答案:

答案 0 :(得分:2)

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

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