我有2个项目(一个WebApi2项目和一个MVC测试项目),它们都发布到同一网站下的IIS(比如IIS1)。
MyWebSite/MyApp
MyWebSite/Test
我在另一个IIS(IIS2)上重复了上述过程。
MyApp
项目使用Windows身份验证,而测试应用程序仅允许匿名。
从测试应用程序中,我在IIS1和IIS2的MyApp
上调用了相同的控制器操作,但是得到了401 Unauthorized
响应。但是,如果我从同一网站运行测试,则会发生错误。那就是:
Test
,在IIS2上获得200,在IIS1上获得401 Test
,在IIS1上获得200,在IIS2上获得401 测试代码为:
var uri = new Uri(baseUrl); //either IIS1 or IIS2
var credentials = new NetworkCredential(); //here username/password
var credentialCache = new CredentialCache
{
{ new Uri(uri.GetLeftPart(UriPartial.Authority)), "NTLM", credentials }
};
WebRequestHandler handler = new WebRequestHandler()
{
AllowAutoRedirect = false,
AuthenticationLevel = AuthenticationLevel.MutualAuthRequested,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
Credentials = credentialCache,
PreAuthenticate = true,
UseCookies = true,
UseDefaultCredentials = false,
UseProxy = false
};
using (var client = new HttpClient(handler, true)
{
BaseAddress = uri
})
{
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync(result.Path).Result;
return response.StatusCode;
}
我是否在代码中缺少某些内容?还是需要在某处配置IIS?
注意
当我使用IIS Express从开发机运行测试应用程序时,所有测试均返回200 OK。