2016-05-31 12 views
1

Ich versuche, einen PUT Anruf zu meinem Dienst zu machen zu aktualisieren ein userREST http Put-Call-

I 404 erhalten, wenn Code meine URL trifft aber in dev-Tool, wenn ich URL klicken, um es nicht an ihn meinen Controller tatsächlich trifft . Ich denke, dass ich mein Modell falsch als Parameter übergebe, kann jemand bitte zeigen Sie mir richtige Richtung bitte, ich bin mir nicht sicher, was ich falsch mache.

hier ist mein Service-Aufruf

var updateUser = function(user) { 
     return $http({ 
      method: "PUT", 
      url: serviceBase + "/UserController/PutUser", 
      data: user 
     }).success(successCallBack).error(errorCallBack); 
    } 

und hier ist mein Controller

[HttpPut] 
    [Route("api/UserController/PutUser")] 
    public IHttpActionResult PutUser(UserDto user) 
    { 
     try 
     { 
      return Ok(); 
     } 
     catch (Exception) 
     { 
      return NotFound(); 
     } 

    } 

Ich versuchte auch JSON.stringify(user) in meinem $http Anruf mit und war gleiche 404 Fehler bekommt kein Glück, aber nach einem Klick tatsächlichen Link wird es meine Controller

Vielen Dank für Ihre Empfehlung!

+0

Da Ihre URL endet mit '/ {Benutzer}', die ein Platzhalter ist. –

+0

@DannyChen Ich aktualisierte meinen Code mit out/{user} habe immer noch das gleiche Problem – kkdeveloper7

Antwort

0

Sie müssen die ID des Benutzers am Ende der URL setzen. Ihre Methoden benötigen 2 Parameter. Eine userId und ein Benutzer.

Sie können auch Ihre URL-Struktur überarbeiten.

+0

Aber was, wenn mein Objekt in put-Methode – kkdeveloper7

+0

übergeben Sie übergeben Sie das Objekt im Körper, und übergeben Sie die ID in der URL. Ihre Methode benötigt also 2 Parameter. Bearbeitete meine Antwort. –

+0

Sorry vielleicht ne noob question.s o setzen Sie nicht in Objekt als einzelner Parameter? – kkdeveloper7

1

Während es üblich ist, auch einen Bezeichner mit PUT-Anfragen einzubeziehen, können Sie mit einigen kleinen Änderungen immer noch das erreichen, was Sie wünschen.

Aktualisieren Sie zuerst die URL für den beabsichtigten Endpunkt im Controller.

HINWEIS: Dies ist nur ein Beispiel. Modifizieren Sie, um Ihren spezifischen Bedürfnissen zu entsprechen.

public class UsersController : ApiController { 

    [HttpPut] 
    [Route("api/Users")] 
    public IHttpActionResult Put(User user) { 
     try { 
      //assuming some form of storage for models 
      repository.Users.Update(user); 
      return Ok(); 
     } catch (Exception) { 
      return NotFound(); 
     } 
    } 
} 

... und dann Service-Aufruf aktualisiert ...

var updateUser = function(user) { 
    return $http({ 
     method: "PUT", 
     url: serviceBase + "/api/Users",   
     data: user 
    }).success(succesCallBAck).error(errorCallBack); 
} 

die user wird im Körper der Anforderung an die Steuerung gesendet werden.

+0

Ich bekomme das in cosole - Ressource konnte nicht geladen werden: Der Server reagierte mit dem Status 404 (nicht gefunden). Wenn ich auf url klicke zeigt es mir diese "{" Nachricht ":" Die angeforderte Ressource unterstützt http Methode 'GET' nicht. "}" Ich konnte POST und GET ohne Probleme erstellen. Ich weiß nicht, warum ich PUT-Operation nicht verstehen kann:/ – kkdeveloper7

+0

Dies ist nicht REST. Lesen Sie den Titel der Frage erneut. –

+0

aktualisiert die Controller-Aktion und js. gleicher Fehler. Ich bekomme 404 und wenn ich auf url gehe sagt mir "{" Message ":" Die angeforderte Ressource unterstützt http-Methode 'GET' nicht. "}" Ich verstehe nicht, warum es versuchen, GET zu verwenden, wenn ich es sagen, PUT zu verwenden in meinem Controller. – kkdeveloper7

Verwandte Themen