WebException响应未返回完整响应

时间:2018-10-17 19:36:10

标签: c# .net asp.net-web-api webclient windows-authentication

我正在Web API服务(Windows认证)中使用WebClient,以对我们的公司目录(Windows认证)进行HTTP调用,以获取用户的个人资料。请看下面。

public string DownloadPage(string ntid)
    {
        var result = "";

        try
        {
            using (var client = new WebClient() {UseDefaultCredentials = true})
            {
                using (var stream = client.OpenRead($"{url}{urlParameter}{ntid}"))
                {
                    using (var reader = new StreamReader(stream))
                    {
                        result = reader.ReadToEnd();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            log.Error(ex); 
        }

        log.Info(result);
        return result;
    }

该代码在本地和我们的测试环境中均能完美运行,但是当我将其部署到Produciton环境时返回了“ 500内部服务器错误”。我根据500 internal server error at GetResponse()的解决方案解决了500个错误。请参阅下面的代码。但是,我发现只返回了html的一部分。是否需要通过代码或IIS设置主体长度或最大返回尺寸之类的东西?

 public string DownloadPage(string ntid)
    {
        var result = "";

        try
        {
            using (var client = new WebClient() {UseDefaultCredentials = true})
            {
                using (var stream = client.OpenRead($"{url}{urlParameter}{ntid}"))
                {
                    using (var reader = new StreamReader(stream))
                    {
                        result = reader.ReadToEnd();
                    }
                }
            }
        }
        catch (WebException webex)
        {
            //https://stackoverflow.com/questions/4098945/500-internal-server-error-at-getresponse
            var errResp = webex.Response;
            using (var stream = errResp.GetResponseStream())
            {
                using (var reader = new StreamReader(stream))
                {
                    result = reader.ReadToEnd();
                }
            }
        }
        catch (Exception ex)
        {
            log.Error(ex); 
        }

        log.Info(result);
        return result;
    }

1 个答案:

答案 0 :(得分:1)

我认为您可以访问活动目录,这就是为什么代码可以在本地运行的原因,但是在IIS上,应用程序池是从没有访问权限的ApplicationPoolIdentity运行的。

转到应用程序池,然后将身份更改为您的帐户。以下是供您参考的图片:enter image description here