MVC Web API:预检响应具有无效的 HTTP 状态代码 404

Posted

技术标签:

【中文标题】MVC Web API:预检响应具有无效的 HTTP 状态代码 404【英文标题】:MVC Web API: Response for preflight has invalid HTTP status code 404 【发布时间】:2017-12-22 14:08:51 【问题描述】:

当我使用它时,我在两个服务器节点上的服务有时运行良好,有时会出错

XMLHttpRequest cannot load.. Response for preflight has invalid HTTP status code 404

我按照***上的答案编写了这段代码,但没有解决问题

 protected void Application_BeginRequest()
    
        if (Request.HttpMethod == "OPTIONS")
        
            Response.Flush();
        
    

Web.config

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Accept, Content-Type, Origin" />
        <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
    </security>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
    <handlers>
      <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>
  </system.webServer>

【问题讨论】:

AngularJS POST Fails: Response for preflight has invalid HTTP status code 404的可能重复 【参考方案1】:

你可能需要一个带有[WebInvoke(Method = "OPTIONS", UriTemplate = "*")]这个装饰的操作合约,例如:

    [OperationContract]
    [WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
    void GetOptions();

操作实现是:

    public void GetOptions()
    
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Content-Type");
    

【讨论】:

感谢您的帮助和努力。你能告诉我在我的服务项目中我把你的代码放在哪里吗? 操作契约应该放在客户端调用遇到错误的同一个服务契约中,操作实现应该放在各自的服务类中。

以上是关于MVC Web API:预检响应具有无效的 HTTP 状态代码 404的主要内容,如果未能解决你的问题,请参考以下文章

预检响应在 Angular Js1 和 Webapi 2 上具有无效的 HTTP 状态代码 405

预检响应在角度 4 中具有无效的 HTTP 状态代码 500

Angular $http:预检响应具有无效的 HTTP 状态代码 403

预检响应在角度发布请求上具有无效的 HTTP 状态代码 403

CORS 问题:预检响应具有无效的 HTTP 状态代码 403

预检的 Wcf webHttpBinding 响应具有无效的 HTTP 状态代码 400