2016-06-20 58 views
0

我被Web API 2控制器卡住,從中調用PUT方法,它給了我一個錯誤,該方法是不允許的。我在Web.config中添加了防止WebDAV阻止方法的代碼行。我嘗試了一切,但它不工作。在控制器中,這可能與我的PUT方法有關。Web API 2 - 方法現在允許(405)PUT

這裏是我的控制器代碼:

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

這是從哪兒我打電話把代碼:

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

這個代碼,我定義的客戶端的HTTP和補充需要的屬性之前,並呼籲其他控制器方法(GET,POST,DELETE),它們都可以工作。這是從Windows窗體應用程序,我也從郵遞員調用,但仍然是相同的錯誤。

+0

我認爲你混了'POST'和'Put'。你確實可以對這兩個動詞使用相同的動作,但是我個人認爲這在Web應用程序中並不是一個好習慣(Post用於創建一個新實體,Put應該用於更新它)。但是,您可以使用這兩個動詞來訪問該操作。例如[這個鏈接](https://www.exceptionnotfound.net/using-http-methods-correctly-in-asp-net-web-api/)。 – Carsten

+0

這是Put,我打錯了.. :( –

+0

你怎麼創建你的'PUT'請求?通過自定義客戶端?通過網頁?通過像Postman/Fiddler這樣的開發工具? –

回答

2

添加[HttpPut][RoutePrefix("api/yourcontroller")][Route("put")]屬性到控制器方法

例子:

[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); 
} 
} 

編輯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); 
} 
} 

從你的HttpRequest調用似乎期望是什麼是HttpResponseMessage因此將返回類型更改爲async Task<HttpResponseMessage>

代碼製作的HttpRequest:

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

仍然是相同的錯誤 –

+1

請在問題中添加您提出請求的代碼 – Pushpendra

+0

這裏是代碼我更新主文章 –