【发布时间】:2017-03-23 14:22:37
【问题描述】:
我正在尝试调用一个 Web API 2 方法,该方法需要从我有授权的桌面上运行的控制台应用程序进行身份验证,但我得到 401 Unathorized。我知道我有授权,因为当我从网络浏览器拨打相同的电话时,它工作正常。所以浏览器可以让我的默认登录 id/pw 发送到 API,但 .NET 的 WebClient 不能?这似乎很疯狂。必须有一种方法可以做到这一点,而无需在控制台应用程序中输入我的 id/pw。
以下是我在控制台应用程序中使用的,但它不起作用。
这是使用 Windows 身份验证,因为它是 Intranet 的东西。
这会引发异常“远程服务器返回错误:(401) 未授权。”
using(var c = new WebClient())
{
c.UseDefaultCredentials = true;
string value = c.DownloadString("http://localhost:62659/api/Store/GetData");
}
我还尝试了以下方法,当我将鼠标悬停在 DefaultNetworkCredentials 上时,用户名/密码是空白字符串。为什么 .NET 不能解决这个问题?
using(var c = new WebClient())
{
var creds = new CredentialCache();
var uri = new Uri("http://localhost:62659/api/Store/GetData");
creds.Add(uri, "ntlm", System.Net.CredentialCache.DefaultNetworkCredentials);
c.Credentials = creds;
string value = c.DownloadString(uri);
}
【问题讨论】:
-
您是否收到异常或任何您可以分享的错误信息?
-
Fiddler2 将向您显示与 get 请求一起传递的凭据。
-
我使用Postman 来解决这类问题。
-
您能否在监控网络流量的同时查看您的凭据信息并在两个不同的调用之间进行比较?
-
那么 cmets 是否告诉我这应该有效并且对其他人有效?
标签: c# .net asp.net-web-api2