【问题标题】:C# PostAsync - {StatusCode: 401, ReasonPhrase: 'Unauthorized' with ASP.NET MVC 4C# PostAsync - {StatusCode: 401, ReasonPhrase: 'Unauthorized' with ASP.NET MVC 4
【发布时间】:2017-06-23 15:53:08
【问题描述】:

我正在使用 ASP.NET MVC4 并使用 PostAsync 将控制器中的方法从一个 MVC4 项目调用到另一个项目。我没有在被调用的控制器或方法中使用任何身份验证属性。

引用此链接:link 修复了我在本地运行应用程序并将 PostAsync 调用到服务器上的应用程序时的问题。现在,当我将应用程序部署到服务器并尝试调用另一个应用程序时,我得到了未经授权的错误。我做错了什么?

在 IIS 中运行的两个应用程序都使用同一个站点和同一个应用程序池。

使用远程调试,这是服务器响应:

{StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Cache-Control: private
  Server: Microsoft-IIS/7.0
  WWW-Authenticate: Negotiate
  WWW-Authenticate: NTLM
  X-Powered-By: ASP.NET
  Date: Fri, 23 Jun 2017 13:44:19 GMT
  Content-Length: 6644
  Content-Type: text/html; charset=utf-8
}}

这是我的代码:

        using (var handler = new HttpClientHandler { UseDefaultCredentials = true })
        using (HttpClient client = new HttpClient(handler) { BaseAddress = new Uri(Properties.Settings.Default.EnvironmentRootPath)})
        {
            List<string> orderNumbers = NumList;
            var pairs = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("orderNumbers", string.Join(",", orderNumbers))
            };

            var content = new FormUrlEncodedContent(pairs);

            // call sync
            var response = client.PostAsync("CentralBroadcast/broadcastNewOrder", content).Result;
            if (response.IsSuccessStatusCode)
            {
                //
            }
            else
            {
                //
            }
        }

【问题讨论】:

  • 您的应用程序是否实现了身份验证/授权?如果不是,那么很可能是它的 webproxy 身份验证问题。您可以尝试在 HttpClientHandler 上设置属性 UseProxy=false。
  • 是的,它正在使用 Windows 身份验证。授权检查已在关键区域完成,但尚未在此控制器上完成。
  • the, "UseDefaultCredentials = true" 在从 Visual Studio 中运行的本地服务器调用服务器上的应用程序时,一切正常,但现在这两个应用程序都在服务器上,因此出现了问题。
  • @PankajKapare 从哪里开始尝试理解为什么它只在服务器上失败?
  • 检查两个应用程序中是否有一些独立的功能,这些功能不相互依赖并且实现了身份验证和授权。查看两个应用程序的这些部分是否按预期工作。这将消除 Windows 身份验证无法按预期工作的可能性。

标签: c# asp.net-mvc-4 iis


【解决方案1】:

问题似乎是由于从托管 IIS 5.1 或更高版本并使用完全限定域名的同一服务器访问本地 Web 应用程序所致。

FQDN 的域名需要在注册表中列入白名单,我可以通过完成以下步骤来做到这一点:

在进行任何调整之前创建注册表备份总是一个好主意

1) 点击开始,点击Run,输入regedit,然后点击OK

2) 在注册表编辑器中,找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0

3) 右键单击​​MSV1_0,指向New,然后单击Multi-String Value

4) 键入 BackConnectionHostNames,然后按 ENTER。

5) 右键单击​​BackConnectionHostNames,然后单击修改。

6) 在数值数据框中,键入本地计算机上站点的主机名或主机名,然后单击确定。。 p>

7) 退出注册表编辑器,然后重新启动 IISAdmin 服务。

更多详细信息参考: https://support.microsoft.com/en-us/help/896861/you-receive-error-401.1-when-you-browse-a-web-site-that-uses-integrate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多