我的web api只从ajax客户端发出net :: ERR_CONNECTION_RESET错误

时间:2017-07-20 14:43:31

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

我的web api在多个IIS中运行,当移动到Azure VM时,它仅在从ajax客户端调用时提供net :: ERR_CONNECTION_RESET,但在使用POSTMAN时正常工作。

当从ajax html客户端点击时,它在OPTIONS请求中显示net :: ERR_CONNECTION_RESET。以为它没有到达服务器但是在引用时

中的http错误文件

C:\ Windows \ System32下\ LogFiles文件\ HTTPERR

显示

2017-07-20 12:54:06 210.18.173.26 54141 10.0.1.4 80 HTTP / 1.1 OPTIONS / api / User / Method1 - 1 Request_Cancelled myappapipool

在web.config中

 <add name="Access-Control-Allow-Origin" value="*" />
 <add name="Access-Control-Allow-Headers" value="Content-Type" />
 <add name="Access-Control-Allow-Credentials" value="true" />
 <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />

我已经尝试在web.config中添加超时,但它没有解决。还尝试更改Web配置&#34; Access-Control-Allow-Headers&#34;值为&#34; *&#34;,它给出了预检请求错误。

由于相同的服务器和ajax客户端通信在其他iis中工作,我怀疑在IIS中配置我的web api时,我遗漏了一些可疑的东西。从POSTMAN或Android客户端调用时,它就像使用IIS中的现有配置的魅力一样。

非常感谢任何帮助/建议。

4 个答案:

答案 0 :(得分:3)

Request_Cancelled来自HTTPErr日志的是由DynamicIPRestrictions Module缓解DDOS攻击引起的。

  

如果设置动态IP限制并将“拒绝操作类型”设置为   “中止请求”,请求将被中止并记录为   HTTPErr日志中的“Request_Cancelled”

默认情况下,如果超过5个并发请求到来,动态IP地址限制可能会中止请求(请检查服务器中配置的设置是什么。)这可能是它适用于一台服务器并且在Azure环境中不起作用的原因。更多细节可以在Security guidelines to detect and prevent DOS attacks targeting IIS/Azure Web Role (PAAS)

找到

答案 1 :(得分:1)

由于多种原因,您将收到此问题。 但在这种情况下,我假设您已经安装了WebDAV,有时它会与其他模块发生冲突。 因此,您最好先尝试删除该扩展程序。

enter image description here

答案 2 :(得分:1)

您看到浏览器控制台出现了什么样的错误? 在浏览器中查看请求/响应标头值。有时配置未正确应用和/或浏览器需要其他标头。 有时候,Allow-Headers param限制性太强,试着用它来玩。

此外,它是否可以在所有浏览器上重现?

答案 3 :(得分:1)

这是我的网络配置配置,适用于邮递员和Chrome,您可以尝试一下:

<system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web>
  <system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
      <remove name="ApplicationInsightsWebTracking" />
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
    </modules>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

希望它有所帮助!