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

时间:2015-01-30 06:43:56

标签: c# angularjs asp.net-web-api fiddler internet-explorer-11

我的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<AuthenticationRequestMessage>(request);
            var token = _hisManager.AuthenticateUser(userSignInDetails.Username, userSignInDetails.Password);
            return new SignInResponseMessage(token, ApiErrorCode.success, Request);
        }
        catch(APIException e)
        {
            throw;
        }
    }

这是IE11中失败的呼叫,完全空白:

enter image description here

这就是Fiddler运行时成功调用的样子: enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

enter image description here

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

enter image description here

然后我将代码更改为此以删除可疑的异步和等待命令: enter image description here

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