同一网站下的2个Web应用程序无法相互通信

时间:2018-08-16 08:51:14

标签: c# asp.net-mvc iis asp.net-web-api

我有2个项目(一个WebApi2项目和一个MVC测试项目),它们都发布到同一网站下的IIS(比如IIS1)。

MyWebSite/MyApp
MyWebSite/Test

我在另一个IIS(IIS2)上重复了上述过程。

MyApp项目使用Windows身份验证,而测试应用程序仅允许匿名。

从测试应用程序中,我在IIS1和IIS2的MyApp上调用了相同的控制器操作,但是得到了401 Unauthorized响应。但是,如果我从同一网站运行测试,则会发生错误。那就是:

  • 在IIS1上运行Test,在IIS2上获得200,在IIS1上获得401
  • 在IIS2上运行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。

0 个答案:

没有答案