【问题标题】:Receiving The remote server returned an error: (403) Forbidden message接收远程服务器返回错误:(403)禁止消息
【发布时间】:2013-01-06 16:33:48
【问题描述】:

我在下面的代码块中收到“远程服务器返回错误:(403) Forbidden”错误消息。具体来说,这一行失败了: var response = (HttpWebResponse)(request.GetResponse());

代码在我的开发机器上完美运行,但在生产环境中却不行。我在两种环境中都使用 IIS 7.5。两台机器都打满补丁(安装了所有 Windows 更新)。使用 4.0 .Net 框架。不知道为什么它适用于一台机器而不是其他机器。

代码:

var uri = new Uri(url);
var request = (HttpWebRequest)WebRequest.Create(uri);

request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.Timeout = System.Threading.Timeout.Infinite;
request.Method = @"POST";
request.ContentType = @"application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)";                    
request.Accept = "*/*";                    

//setup the stream variables and do the send/retrieve of data
Stream writeStream = request.GetRequestStream();
var bytes = System.Text.Encoding.ASCII.GetBytes(postData);
writeStream.Write(bytes, 0, bytes.Length);
writeStream.Close();                    

var response = (HttpWebResponse)(request.GetResponse());                    
var responseStream = response.GetResponseStream();                    
var readStream = new StreamReader(responseStream, Encoding.UTF8);                    
pageResponse = readStream.ReadToEnd();

【问题讨论】:

    标签: c# asp.net iis-7.5


    【解决方案1】:

    您可能需要指定凭据

    request.Credentials = CredentialCache.DefaultCredentials;
    

    或者如果您需要通过特定的凭证通过:

    request.Credentials = new NetworkCredentials("user", "password");
    

    更多关于NetworkdCredential Class的信息

    【讨论】:

    • 尝试添加 request.Credentials = CredentialCache.DefaultCredentials,但结果仍然相同。我没有在我的开发机器中使用/传递凭据,所以不确定为什么在 prod 中需要它。
    【解决方案2】:

    您是否尝试在请求上设置 Credentials 对象,并为您尝试访问的服务器提供适当的授权?请参阅 System.Net.NetworkCredential。

    【讨论】:

      【解决方案3】:

      尝试检查生产和开发 iis 应用程序的身份验证方法(iis 管理器 -> 点击网站 -> 功能视图 -> 身份验证)。

      听起来你在开发 iis 上启用了匿名身份验证,而在生产 iis 上没有。 如果您没有在生产环境中启用匿名身份验证,您可能需要设置 request.Credentials,如上所示。

      【讨论】:

      • 我在 dev 和 prod 中都启用了匿名功能。不知道为什么两者的行为不同。两种环境的设置似乎相同。
      • 好的,您可以访问事件日志吗?尝试在那里寻找任何线索。您可以检查的另一件事是运行应用程序的应用程序池。查看 .net 版本。在某些情况下,当安装了 .net 3.5 和 4.0 时,您需要运行 aspnet_regiis -i 来注册 .net framework 4.0。
      猜你喜欢
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多