WebRequest 在本地工作,但在发布时不工作
WebRequest Works Locally, but Not When Published
我在构建 Web 客户端时 运行 遇到了麻烦,该客户端使用集成 Windows 身份验证来使用 RESTful Web 服务。
当我在本地 运行 客户端(如我自己)时,它工作正常,并且我在 IIS 日志中看到了我的用户 ID。但是,当我远程 运行 它时,没有传递任何凭据(即我没有在 IIS 日志中看到我的用户 ID),并且我得到一个错误
"The remote server returned an error: (401) Unauthorized."
本地和发布的客户端调用相同的服务。另请注意,当我在本地 运行 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>();
}
如有任何帮助,我们将不胜感激。
我认为您必须创建允许您的项目使用的 IIS 用户。
关注这个Anonymous Access
第二个选项:
尝试在 Microsoft Internet Information Services (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.
祝你好运!
我发现此问题的答案与以下 Stack Overflow post 的答案相同:。
感谢那些花时间查看本文的人!
我在构建 Web 客户端时 运行 遇到了麻烦,该客户端使用集成 Windows 身份验证来使用 RESTful Web 服务。
当我在本地 运行 客户端(如我自己)时,它工作正常,并且我在 IIS 日志中看到了我的用户 ID。但是,当我远程 运行 它时,没有传递任何凭据(即我没有在 IIS 日志中看到我的用户 ID),并且我得到一个错误
"The remote server returned an error: (401) Unauthorized."
本地和发布的客户端调用相同的服务。另请注意,当我在本地 运行 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>();
}
如有任何帮助,我们将不胜感激。
我认为您必须创建允许您的项目使用的 IIS 用户。
关注这个Anonymous Access
第二个选项:
尝试在 Microsoft Internet Information Services (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.
祝你好运!
我发现此问题的答案与以下 Stack Overflow post 的答案相同:。
感谢那些花时间查看本文的人!