C#PostAsync - {StatusCode:401,ReasonPhrase:'未授权'与ASP.NET MVC 4

时间:2017-06-23 15:53:09

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

我正在使用ASP.NET MVC4并使用PostAsync调用控制器中的一个方法,从一个MVC4项目到另一个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
            {
                //
            }
        }

1 个答案:

答案 0 :(得分:0)

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

FQDN的域名需要在注册表中列出白名单,我可以通过完成以下步骤来完成此操作:

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

1)点击开始,点击运行,输入regedit,然后点击确定

2)在注册表编辑器中,找到并单击以下注册表项: 的 HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\ LSA \ MSV1_0

3)右键单击 MSV1_0 ,指向新建,然后单击多字符串值

4)键入BackConnectionHostNames,然后按ENTER键。

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

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

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

有关详细信息,请参阅: https://support.microsoft.com/en-us/help/896861/you-receive-error-401.1-when-you-browse-a-web-site-that-uses-integrate