除非Fiddler正在运行,为什么IE11会创建空白的post请求?

我的AngularJS $ http发布对我的C#WebAPI restful服务的请求在Internet Explorer 11的Windows 8.1上失败。Firefox和Chrome都可以正常工作。

更多细节:

  • IT部门说我们的网络没有代理
  • 所有浏览器都不会选中所有“自动检测”和“使用代理”设置
  • 请求在我的localhost上无法访问IIS,并在本地服务器上运行站点和服务
  • IE11的增强保护模式已关闭
  • 请求的连接头是’keep-alive’(我也尝试’关闭’,它仍然失败)
  • 有时一个请求会成功,只有第二个请求才会失败
  • 没有显示错误 – IE的网络选项卡中的请求只显示’待定’,所有标题和正文都是空白的
  • 我使用的是HTTP,而不是HTTPS
  • 我已经尝试了元标记’X-UA-Compatible’IE9和Edge
  • 在他们的机器上使用IE11的同事的请求也失败了
  • 当Fiddler运行时,所有浏览器中的所有调用都能正常工作
  • Visual Studio 2013浏览器链接已关闭(因此SignalRArtery JS文件不会不断调用服务器并干扰测试)

我的AngularJS请求调用如下所示:

var url = UrlService.GetUrlOfApi() + 'Account/SignIn'; var postData = { 'username' : username, 'password' : password }; $http( { 'url': url, 'data': postData, 'method': 'POST' }) .success(function (data) { ... 

我的C#服务看起来像这样:

 [RoutePrefix("Account")] [AllowAnonymous] public class AccountController : BaseController { [ResponseType(typeof(SecureResponseModel))] [Route("SignIn")] [HttpPost] public IHttpActionResult SignIn(HttpRequestMessage request) { try { var userSignInDetails = GetPostData(request); var token = _hisManager.AuthenticateUser(userSignInDetails.Username, userSignInDetails.Password); return new SignInResponseMessage(token, ApiErrorCode.success, Request); } catch(APIException e) { throw; } } 

这是IE11中失败的调用,完全是空白的:

在此处输入图像描述

这就是Fiddler运行时成功调用的样子: 在此处输入图像描述

任何人都可以推荐任何其他设置来检查或尝试一下吗?

我修好了。 我的同事建议采用传统的调试策略来使最简单的情况起作用 – 所以我制作了一个测试后控制器Web服务,它可以处理每个调用:

在此处输入图像描述

然后我看到这个方法与失败的方法之间的唯一区别是BaseController,它包含以下方法:

在此处输入图像描述

然后我将代码更改为此以删除可疑的异步和等待命令: 在此处输入图像描述

现在一切都很完美。 但任何人都能解释为什么吗 在谷歌搜索这个问题的过去一天,我已经读过关于IE发送两个数据包而不是像其他浏览器一样的数据包,以及关于资源被打开干扰连接。 但是我不明白这个等待命令是如何在一个浏览器中打破连接的。