2017-11-04 3 views
0

GET funktioniert einwandfrei. Aber in Chrome mit POST-Methode habe ich: Fehler beim Laden der Ressource: Der Server antwortete mit einem Status von 405 (Method Not Allowed). Fehler beim Laden http://localhost:49834/api/Rest/: Antwort für Preflight hat ungültigen HTTP-Statuscode 405. In InterntExplorer habe ich: SCRIPT7002: XMLHttpRequest: Netzwerkfehler 0x80070005, Zugriff verweigert.Web-API-Dienst HTTP-Statuscode 405 bei Methode POST

Controller:

[EnableCors("*", "*", "*")] 
    public class RestController : ApiController 
    { 
// POST: api/Rest 
     [HttpPost] 
     public void Post([FromBody]Request Request) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Requests.Add(Request); 
       db.SaveChanges(); 
      } 
     } 
} 

WebApiConfig.cs

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
      var json = config.Formatters.JsonFormatter; 
      json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 
      config.Formatters.Remove(config.Formatters.XmlFormatter); 

Web.config:

<httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="*" /> 
     <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> 
    </customHeaders> 
    </httpProtocol> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="WebDAVModule"/> <!-- add this --> 
    </modules> 
    <handlers>  
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="WebDAV" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
</system.webServer> 

AJAX POST:

var url = "http://localhost:49834/"; 
$.ajax({ 
       type: "POST", 
       url: url + "api/Rest/", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       data: JSON.stringify(submitData), 
       success: function (data) { 
       }, 
       error: function (err) { 
        console.log(err); 
        alert(err.status + " - " + err.statusText); 
       } 
      }) 

Ich benutze IIS Express: applicationHost.config Datei in% userprofile% \ Dokumente \ IISExpress \ config Ordner => ExtensionlessUrl-Integrated-4.0 Handler ist wie folgt konfiguriert Verb = "GET, HEAD, POST, DEBUG, PUT, DELETE"

GET funktioniert:

$.getJSON(url + "api/Rest").done(function (data) { 
        var mass = new Array();     
        $(data).each(function (index, e) { 
         ReqArray.push(e); 
        }) 
        vm.requests(ReqArray); 
       }); 

Antwort

0

einige Probleme mit meinem ajax es war, wie diesen es gut funktioniert:

var url = "http://localhost:49834/"; 
    $.ajax({ 
         type: "POST", 
         url: url + "api/Rest", 
         dataType: "json", 
         data: submitData, 
         success: function (data) { 
         }, 
         error: function (err) { 
          console.log(err); 
          alert(err.status + " - " + err.statusText); 
         } 
        }) 
+0

es ist gut, dass Sie den Fehler selbst darauf hingewiesen, aber es ist ebenso wichtig, warum dies zu wissen gearbeitet - Die von Ihnen erstellte 'API' erwartet beim Aufruf das 'HTTP'-Verb als' POST ' Andernfalls gibt es 405 (Methode nicht erlaubt) zurück. Standardmäßig sendet die 'getJSON' Methode eine Anfrage mit dem 'GET' 'HTTP' Verb und die explizite Übergabe des Verbs durch die 'Ajax' Methode löste Ihr Problem. Prost !!! –

Verwandte Themen