2016-07-26 20 views
0

Ich versuche, ein HTTP PUT mit einem Integer-Parameter zu einem MVC WebApi zu machen.Wie man ein HTTP PUT mit einem Parameter in einer ionic 2 App zu einer WebAPI macht?

Ich versuchte, die Winkel 2 Richtlinien für HTTP PUT zu folgen: https://angular.io/docs/ts/latest/guide/server-communication.html

Mein WebAPI:

public IHttpActionResult Put([FromBody]int id) 
{ 
    return Ok(); 
} 

Mein Http PUT in meinem Dienst in meinem ionischen 2 App:

makePut(){ 
    let body = JSON.stringify({id:155320}); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    return new Promise(resolve => { 
     this.http.put('API_URL', body, options) 
     .subscribe(
      response => { 
      console.log(response.text()); 
      }, 
      error => { 
      //Failed to Login. 
      alert(error.text()); 
      console.log(error.text()); 
      }); 
    }); 
} 

Und schließlich der Anruf zu meinem Service von meiner Homepage:

this.service.makePut().then(data => {console.log(data);}); 

Wenn ich dies ausführen, bekomme ich eine 405 Methode nicht erlaubt. Gibt es etwas, was mir fehlt?

UPDATE hier ist Teil der web.config in meinem Web-api:

<system.webServer> 
    <security> 

    </security> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="WebDAVModule" /> 
    </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> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <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> 
+1

Warum haben Sie Ihren Körper Objekt stringify? "let body = JSON.stringify ({id: 155320});" statt "let body = {id: 155320};" ? –

+0

Das war, was in der Dokumentation war: https://angular.io/docs/ts/latest/guide/server-communication.html Aber ich brauche es nicht. Ich habe meine Antwort aktualisiert. – MasterProgrammer200

Antwort

0

Ich konnte das Problem beheben, das sich als ein CORS-Problem herausstellte. Sie können sehen, wie Sie dieselbe Herkunftsrichtlinie in Chrome hier deaktivieren: How to resolve CORS issue and JSONP issue in Ionic2

Sobald ich es deaktiviert in Chrome, die HTTP PUT erfolgreich.

Hier ist meine letzte Code:

makePut(){ 
    let body = 155320; // this is different 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    return new Promise(resolve => { 
     this.http.put('API_URL', body, options) 
     .subscribe(
      response => { 
      console.log(response.text()); 
      }, 
      error => { 
      //Failed to Login. 
      alert(error.text()); 
      console.log(error.text()); 
      }); 
    }); 
} 
1

Es könnte Web-API-Fehler und Sie können, indem Sie diesen Code in Ihre Datei web.config beheben, dass

<handlers accessPolicy="Read, Script"> 
    <remove name="WebDAV" /> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
    <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" /> 

Diese article kann Ihnen mehr Informationen über 405 Fehler geben.

+0

Ich ersetzte die Handler in web.config und bekam immer noch eine 405. Ich aktualisierte auch meinen Beitrag mit dem Web-Server-Abschnitt meiner web.config. Wenn ich den HTTP-Aufruf zu einem POST ohne Parameter ändern, funktioniert die Post() -Methode in meiner Web-API gut. Es ist nur der PUT mit Params, der das Problem hat. Könnte es sein, dass etwas nicht stimmt mit der Art, wie ich den Ganzzahl-Parameter übergebe? – MasterProgrammer200