【问题标题】:Passing NetworkCredential to HttpWebRequest in C# from ASP.Net Page从 ASP.Net 页面将 NetworkCredential 传递给 C# 中的 HttpWebRequest
【发布时间】:2009-11-05 20:33:45
【问题描述】:

我正在尝试使用 HTTPWebRequest 访问 Web 服务,但在传递凭据时遇到问题,请参见下面的代码。我可以看到在调试器中构建的凭据对象 nc,以及在 request.Credentials 的分配中,但是当我到达最后一行代码时,它会出现未经授权的错误消息。我已经让我们的服务器人员查看服务器上的请求,并且没有传递任何凭据。我对 Credentials 对象做错了什么,还是我需要做一些我没有在这里做的事情?

Uri requestUri = null;
Uri.TryCreate("https://mywebserver/webpage"), 
    UriKind.Absolute, out requestUri);

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create
    (requestUri);

NetworkCredential nc =
    new NetworkCredential("user", "password");

request.Credentials = nc;

request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

【问题讨论】:

  • 您是否使用过 Fiddler 亲自查看您正在传递的内容?我不喜欢依赖服务器人员来评估这样的事情:)
  • JustLoren - 在您发布此评论之前,我不知道 Fiddler,我下载了它并在 Auth 选项卡下显示 No Proxy-Authorization Header is present。没有授权标头,所以我仍然认为我的代码有问题。
  • 您是否有理由不生成代理类来调用内部 Web 服务?
  • 是的,我调用的服务是 REST 服务,所以没有 wsdl 文件。

标签: asp.net http httpwebrequest


【解决方案1】:

NetworkCredentials 要么非常不直观,要么不稳定,或者两者兼而有之。无论如何,您可以通过完全绕过 NetworkCredentials 并使用此方法来解决问题(我发现,由 mark.michaelis.net 提供)

/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */
byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password);
req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer);

所以您正在做的是手动为您的 HttpWebRequest 创建一个标头并插入内容,因为它会出现在基本身份验证标头中。像魅力一样工作。

【讨论】:

  • 太好了,这个有效,接受的答案对我不起作用。
【解决方案2】:

Microsoft Premier Support 最后通过使用 CredentialCache 类添加凭据和“基本”授权帮助我解决了这个问题:

NetworkCredential nc =
    new NetworkCredential(GetSetting("username"), GetSetting("password"));
CredentialCache cache = new CredentialCache();

cache.Add(requestUri, "Basic", nc);

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri);

【讨论】:

  • 不使用ss l,密码会明文传输吗?
【解决方案3】:

它帮助了我(对于 Unity3d mono,而不是 ASP.Net):

request.PreAuthenticate = true;

不需要手动设置Authorization header或使用CredentialCache。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多