WebRequest在本地工作,但在发布时不工作

时间:2018-05-18 22:28:50

标签: c# httpwebrequest

在构建使用集成Windows身份验证的RESTful Web服务的Web客户端时,我遇到了麻烦。

当我在本地运行客户端(就像我自己)时,它运行正常,我在IIS日志中看到了我的用户ID。但是,当我远程运行它时,没有传递凭据(即我没有在IIS日志中看到我的用户ID),并且我收到错误

  

"远程服务器返回错误:(401)未经授权。"

本地和已发布的客户端都调用相同的服务。另请注意,当我在本地运行时,IIS日志会显示两个条目(一个没有用户名,另一个没有用户名)。当我从发布的位置运行时,仍然有两个条目,但都没有显示用户名。

以下是我用来拨打电话的代码:

var request = (HttpWebRequest) WebRequest.Create(ConfigurationManager.AppSettings["positionServicePath"] + "?positionNumberSearch=" + searchString);
        request.Method = "GET";
        request.ContentType = "application/json";
        request.UseDefaultCredentials = true;
        request.PreAuthenticate = false;

        CredentialCache cc = new CredentialCache();
        cc.Add(
            new Uri(ConfigurationManager.AppSettings["positionServicePath"]),
            "Negotiate",
            CredentialCache.DefaultNetworkCredentials);
        request.Credentials = cc;

        // Get the Response
        using (var response = request.GetResponse()){
            var reader = new StreamReader(response.GetResponseStream());

            // Convert the response to objects from Json
            var resultList = JsonConvert.DeserializeObject<IEnumerable<PositionModel>>(reader.ReadToEnd());

            // Return an empty list, if no data was retrieved
            return resultList != null ? resultList.ToList() : new List<PositionModel>();
        }

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为你必须创建允许你的项目的IIS用户。

关注此Anonymous Access

第二个选项: 尝试在Microsoft Internet信息服务(IIS)中的身份验证方法中启用anonymous access

Step:
1. Open your IIS.
2. In IIS Group:
3. open or select Authentication:
4. Select Anonymous Authentication:
5. On the Left Side select Enabled.

祝你好运!

答案 1 :(得分:0)

我发现此问题的答案与以下Stack Overflow帖子的答案相同:Unable to authenticate to ASP.NET Web Api service with HttpClient

感谢那些花时间看这个的人!