【问题标题】:Why Am I Getting 401 Unauthorized Response?为什么我会收到 401 未经授权的响应?
【发布时间】:2021-02-02 12:36:22
【问题描述】:

我尝试使用以下 C# 代码从可以手动访问的 url 获取响应。

        static void Main(string[] args)
        {
            Uri theRequestUriString = new Uri("<<<my_url>>>");
            var request = WebRequest.Create(theRequestUriString);
            request.UseDefaultCredentials = true;
            WebProxy myproxy = new WebProxy("<<<my_proxy>>>:<<<my_port>>>", true);
            request.Proxy = myproxy;
            request.Timeout = Convert.ToInt32(TimeSpan.FromMinutes(5).TotalMilliseconds);
            request.Credentials = CredentialCache.DefaultCredentials;

            string textResponse;
            var resp = request.GetResponse();//*****401 error here*****
            using (var sr = new StreamReader(resp.GetResponseStream()))
            {
                textResponse = sr.ReadToEnd().Trim();
            }

        }
System.Net.WebException: 'The remote server returned an error: (401) Unauthorized.'

我可以手动去那里,但如果我尝试使用此代码,则会得到 401 Unauthorized。 CredentialCache 不应该处理这个问题吗?如果不是这样,我将在本地使用 Visual Studio。

如果 url 改为 https://www.yahoo.com,那么这很好。

【问题讨论】:

  • 为什么我的 http 请求不起作用”问题的第一条规则。首先让它在 Postman 中工作。第二条规则,然后用Ffiddler算出postman和C#代码的区别
  • 401 是服务器响应。关于您的请求的某些内容不满足服务器的要求,因此它认为您没有被授权。为了进一步解释为什么我们不能只给你一个解决方案:我可以用这样的东西编写一个服务器应用程序:if (today == Friday &amp;&amp; (priceOfCookiesAtStarBucks &gt; 100 || weather == Rainy)) { return 401; }。如果您调用我的 API,如果满足这些条件,您将收到 401 响应。
  • Cookie 永远不应该这么贵,但我真的很喜欢这个例子。

标签: c# asp.net request http-get


【解决方案1】:

在您的代码中

request.Credentials = CredentialCache.DefaultCredentials

表示您正在使用NTLM for auth

Windows 身份验证(以前称为 NTLM,也称为 Windows NT 质询/响应身份验证)是一种安全的身份验证形式,因为用户名和密码在通过网络发送之前经过哈希处理。当您启用 Windows 身份验证时,客户端浏览器会在与您的 Web 服务器的加密交换中发送密码的强哈希版本。

Read more here

这基本上是您的 Windows 凭据。当人们在浏览器中打开网站时,他们可以使用传递给网站的 Windows 凭据轻松地对网站进行身份验证。

现在关于为什么在您运行代码时它不起作用。我会看到的地方是您是否将您的内容设置为使用 Windows 身份验证。有几种方法可以做到,其中一些是here

我还将向您指出这个 SO 答案:Windows authentication doesn't work when I run project from Visual Studio

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多