【发布时间】: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