2016-06-20 7 views
0

Ich bin mit Web API 2 Controller stecken, von denen ich PUT Methode aufrufen und es gibt mir einen Fehler, dass Methode nicht erlaubt ist. Ich fügte Codezeilen in Web.config hinzu, die verhindern, dass WebDAV Methoden blockiert. Ich habe alles versucht, aber es funktioniert nicht. Es ist wahrscheinlich ein Problem mit meiner PUT Methode in einem Controller.Web API 2 - Methode jetzt erlaubt (405) für PUT

Hier ist mein Controller-Code:

public IHttpActionResult Put(int id, [FromBody]ArticleModel model) { 
    var article = _articleService.UpdateArticle(model); 
    return Ok<ArticleModel>(article); 
} 

Dies ist ein Code aus, wo ich setzen nennen: Ich Client als http definiert

response = await client.PutAsJsonAsync("api/article/2", articleModel); 

vor diesem Code und hinzugefügt benötigten Eigenschaften und rief andere Controller-Methoden (GET, POST, DELETE), sie alle arbeiten. Dies ist von Windows Form App, und ich rufe auch von Postman, aber immer noch den gleichen Fehler.

+0

Ich glaube, Sie nur gemischt 'Post' und' Put'. Sie können in der Tat die gleiche Aktion für beide Verben verwenden, aber ich persönlich denke, das ist keine gute Übung in einer Web-Anwendung (Post ist da, um eine neue Entität zu erstellen, Put sollte verwendet werden, um es zu aktualisieren). Sie können jedoch beide Verben verwenden, um auf die Aktion zuzugreifen. Für ein Beispiel gibt es [diesen Link] (https://www.exceptionnotfound.net/using-http-methods-correctly-in-asp-net-web-api/). – Carsten

+0

Es ist Put, ich machte Tippfehler .. :( –

+0

Wie erstellen Sie Ihre 'PUT' Anfrage? Durch einen benutzerdefinierten Client? Durch eine Webseite? Durch ein Entwickler-Tool wie Postman/Fiddler? –

Antwort

2

hinzufügen [HttpPut], [RoutePrefix("api/yourcontroller")] und [Route("put")] Attribut zu Ihrem Controller-Methode

Beispiel:

[RoutePrefix("api/yourcontroller")] 
public class YourController 
{ 
[HttpPut] 
[Route("{id}/put")] 
public IHttpActionResult Put(int id, [FromBody]ArticleModel model) { 
    var article = _articleService.UpdateArticle(model); 
    return Ok<ArticleModel>(article); 
} 
} 

EDIT 1

public class YourController 
{ 
[HttpPut] 
[Route("api/article/{id}/put")] 
public async Task<HttpResponseMessage> Put(int id, [FromBody]ArticleModel model) { 
    var article = _articleService.UpdateArticle(model); 
    return Ok<ArticleModel>(article); 
} 
} 

Von Ihrem Httprequest nennen Es scheint, was erwartet wird, ist ein HttpResponseMessage Also änderte der Rückgabetyp auf async Task<HttpResponseMessage>

-Code für die Herstellung von Httprequest:

response = await client.PutAsJsonAsync("api/article/2/put", articleModel); 
+0

Immer noch der gleiche Fehler –

+1

Bitte fügen Sie den Code, aus dem Sie die Anfrage in der Frage – Pushpendra

+0

machen Hier ist der Code Ich aktualisierte Hauptbeitrag –