2017-04-03 4 views
0

Ich versuche, eine Anfrage an eine API-Methode mit jQuery zu senden. Client-Seite Code ist wie folgt:OPTIONS URL nicht gefunden & Antwort für Preflight hat ungültigen HTTP-Statuscode 404

$.ajax({ 
     type: 'POST', 
     url: endpointLocation, 
     headers: { 
      AuthToken: "myTokenValue",    
      UserId: "12345" 
     }, 
     timeout: 5000, 
     dataType: 'json', 
     data: { 
     isActive: true, 
     empId: 2050 
     }, 
     success: function (result) { 
      debugger; 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
      debugger; 
     } 
    }); 

Web.config Einträge:

<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> 

    <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> 

Ich erhalte eine Fehlermeldung "XMLHttpRequest kann http://domain/application/method/ nicht geladen Antwort für Preflight ungültige HTTP-Statuscode 404 hat." Nach diesem die Die Steuerung springt zur Fehlermethode.

Auch wenn ich die Header, die ich in web.config-Datei sende, hinzufügen, macht es immer noch keinen Unterschied. Dies ist, wie ich versuchte Header in web.config hinzufügen:

<add name="Access-Control-Allow-Headers" value="Content-Type, AuthToken, UserId" /> 

Ich brauche diese Header zu senden, da die API-Endpunkt benutzerdefinierte Authentifizierung implementiert, die Werte von Header und überprüfen den Benutzer erfolgt. Dies kann nicht vermieden werden.

Kann mir bitte jemand helfen, das Problem zu beheben?

Antwort

1

Versuchen in Global.asax.cs folgenden hinzufügen

protected void Application_BeginRequest() 
     { 
      if (Context.Request.HttpMethod != "OPTIONS") return; 
      Context.Response.AddHeader("Access-Control-Allow-Origin", Context.Request.Headers["Origin"]); 
      Context.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,x-access-token"); 
      Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); 
      Context.Response.AddHeader("Access-Control-Allow-Credentials", "true"); 
      Context.Response.End(); 
     } 
+0

Gerade authToken & UserId hinzufügen musste Datei Context.Response.AddHeader Access-Control-Allow-Header und kommentieren Sie ("Zugriff-Control- Allow-Origin ", Context.Request.Headers [" Origin "]). "*" war bereits in der web.config. – User2682

Verwandte Themen