c# - MVC5申请表导致提交时有多个post请求

标签 c# asp.net-mvc iis-7.5 windows-server-2008

我们有一个 MVC5/Razor 应用程序,上周突然开始表现得很奇怪。它托管在 Windows Server 2008 R2(带 IIS 7.5)上,上周安装 Windows 更新后问题开始出现。在此之前,应用程序运行良好。

问题是,当用户提交一个由 10 个文本字段、4 个文本区域和一个下拉列表组成的简单表单时,服务器无法正确响应,导致“Error_Connection_Reset”(在 Chrome 中)/“页面不可用” "(在 IE11 中)。

我们将 POST-Redirect-GET 模式与 RedirectToAction 结合使用在 Controller 的接收操作中,通常会导致 302 响应和重定向。

表单呈现如下:

@using (Html.BeginForm("Create", "Controller"))
{
    @Html.AntiForgeryToken()
    <div class="editor-fields">
        @Html.EditorFor(m => m.Model)
    </div>

    <div class="clear-fix"></div>
    <div class="submit-area">
        <input type="submit" value="Submit" />
    </div>
}

该 Action 具有以下属性:

  • [HttpPost]
  • [ValidateAntiForgeryToken]
  • [AllowAnonymous]
  • [ValidateInput(false)]

我们还使用 Google Analytics 和 jQuery,jQuery 验证,不显眼的 ajax 优化(缩小)。大多数 JS 脚本都包含在 Scripts.Render 中.

当我们从自己的域内部访问时,该应用程序工作正常,但由于我们所有的用户都需要从外部访问,因此我们需要修复此错误。这可能表明存在 DNS 问题,但我们的 IT 支持人员表示 DNS 看起来很好并且最近没有更改。

这是我们到目前为止所做的和发现的:

  • inetpub\logs\LogFiles 中记录文件显示多个(3 到 10 个)POST 请求,所有请求的状态代码均为 302,但没有后续 GET 请求。而且确实应该只有一个 POST 请求,然后是一个 GET 请求!
  • %windir%\System32\LogFiles\HTTPERR 中记录文件没有显示任何有趣的内容,只是一堆 Timer_ConnectionIdle每当网站达到其空闲超时值(默认为 20 分钟)时出现“错误”。
  • 在 Chrome 和 IE11 中使用 Fiddler 和开发工具检查请求,所有请求都显示相同的请求 header 。使用 fiddler 我们得到 [Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes .在 Chrome 开发工具中它说 (failed)在“状态”列中。
  • 在 IIS 中禁用缓存和压缩。
  • 在 web.config 文件中关闭 CustomErrors
  • 已添加 <modules runAllManagedModulesForAllRequests="true">在 web.config 中
  • 已在 Google 和 SO 中搜索答案,但目前无果
  • 检查了最近从 Windows Update 安装的关于 .NET 4.5.2 的更新和相关的知识库文章,但没有提到与此问题真正相关的内容
  • 编辑:此外,我们启用了失败请求跟踪,但我们只会在 inetpub\logs\FailedReqLogFiles 中获取缺少 favicon.ico 的失败请求日志。文件夹

有趣的是,如果我在 Chrome 开发工具中勾选“禁用缓存”,应用程序也能正常工作。这可能表明这是一个缓存问题,这也是我们尝试在 IIS 中打开输出缓存的原因。

我们的下一步是启动新服务器(Windows 2012 和更新版本的 IIS)并在那里安装应用程序在我们当前的服务器上安装 WireShark 以进一步调查请求。但是,如果有人经历过这种行为并知道解决方法,我们宁愿暂时修复它。所以,请,如果有人可以提供帮助,请指教。

最佳答案

由于问题似乎只发生在我们域外的用户身上,我们开始认为这个问题可能与我们的防火墙有关,所以我们联系了我们的防火墙提供商,他们确认最新版本的防火墙软件存在问题.碰巧的是,防火墙软件在我们服务器上安装 Windows 更新的同一天进行了更新,这可能会造成一些困惑。恢复到以前版本的防火墙软件后,问题就消失了,一切都再次按预期运行。呸!

关于c# - MVC5申请表导致提交时有多个post请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37930383/

相关文章:

c# - 比较 LINQ 方法语法中的 2 个数字列表

javascript - 如何将 javascript 输出到 asp.net mvc3 中的 View ?

asp.net-mvc - 存储记录的用户数据

Javascript:是否有类似 sessionStorage 或 localStorage 之类的东西仅适用于一页?

.net - NetTcpActivator 服务(Net.Tcp Listener Adapter)偶尔停止响应

transactions - ASP Classic 中的事务问题

c# - 使用 C# 鼠标事件从服务器向客户端发送标志

c# - CustomMessageBox 中的列表框总是向上滚动

javascript - C# 使用 + 运算符的奇怪行为

asp.net-mvc-3 - IIS7.5 上的 ASP.NET MVC 3 Intranet 站点 w Windows 身份验证提供 401.3 并且尝试登录时请求的文件授权失败