2017-02-15 1594 views
2

以下是WebAPI操作。在谷歌搜索關於下面的錯誤: -如何解決 - 請求的資源不支持http方法'POST'

The requested resource does not support http method 'POST'

我得到了相應的更新我的API鏈接&數量,但仍然我得到同樣的錯誤。

但仍然可以通過郵遞員調用以上時拋出的錯誤。

Error

如何擺脫這種錯誤的?

也可以解決這個問題,而不使用方法參數列表中的[FromBody]屬性?

任何幫助/建議高度讚賞。 謝謝。

+0

顯然,還有另一個叫做「重命名」的動作。和[路由(「重命名/ {userId}/{type}/{title} /」)]與您的請求url不匹配。 – levent

+0

@levent,已勾選。沒有什麼這樣的 –

回答

1

你已經宣佈的路線,需要的URL參數

[Route("rename/{userId}/{type}/{title}/")] 

所以,當你發送請求api/customer/rename它不符合這個方法。你應該從路由參數刪除您所傳遞請求體參數

[Route("rename")] 

請確保您有您的控制器上適當RoutePrefix("api/customer")屬性。


第二個問題是多個[FromBody]參數。您將獲得無法綁定多個參數的錯誤。有限制 - 您只能將一個參數標記爲FromBody。見Sending Simple Types注意事項:

Web API reads the request body at most once, so only one parameter of an action can come from the request body. If you need to get multiple values from the request body, define a complex type.

你應該創建複雜的類型,將持有的所有參數

public class RenameModel 
{ 
    public int UserId { get; set; } 
    public string Type { get; set; } 
    public string Title { get; set; } 
} 

及更換方法簽名

[HttpPost] 
[Route("rename")] 
public IHttpActionResult Rename(RenameModel model) 

,併發送請求數據作爲應用/ X- www-form-urlencoded

+0

我試過你的輸入了。同樣的錯誤! –

+0

多個'[FromBody]'很好,或者它可能是一個原因? –

+0

@ Kgn-web抱歉,不在了。是的,這也是一個問題。更新了答案。請確保路由前綴是'api/customer' –

0
[Route("rename/{userId}/{type}/{title}/")] 
public IHttpActionResult Rename([FromBody] int userId, [FromBody] string type, [FromBody] string title) 

最後一個答案是正確的,你要求路線中的這些參數,但是說你期望他們在帖子正文中。另外,通常路線將以名詞而不是動詞開始。你在重命名的是什麼? (即[路線( 「用戶/重命名/ {用戶id}/{類型}/{標題}」)]根據您的初始後

,試試這個:

[HttpPost] 
[Route("rename/{userId}/{type}/{title}" Name = "RenameUser"] 
public IHttpActionResult Rename(int userId, string type, string title) 
{ 
    _myServiceMethod.Rename(userId, type, title); 
    return new StatusCodeResult(HttpStatusCode.Created, this); 
} 

或者,如果你想做的事與體內的信息後: 聲明你的數據契約:

public class User 
{ 
    public string Type { get; set; } 
    public string Title { get; set; } 
} 

然後在終點:

[HttpPost] 
[Route("rename/{userId}", Name = "RenameUserPost")] 
public IHttpActionResult RenameUserPost(int userId, [FromBody] User userData) 
{ 
    return new StatusCodeResult(HttpStatusCode.Created, this); 
} 

請注意,在這兩個返回中,'this'是指從ApiController繼承的控制器類。在swagger驗證這兩個,他們接受POST和返回狀態代碼。

希望這會有所幫助。

+0

Name屬性的用法是什麼? –

+0

多[FromBody]很好,或者它可能是一個原因? –

+0

路由命名用於生成鏈接,例如,如果您想使用Created(Uri location,T Content)響應類型,則可以使用手動滾動路由幫助程序或類似Ploeh.Hyprlinkr的方式來動態獲取Uris路線名稱。因此,如果您更改路線,該鏈接仍然是正確的。 – jeffj23

相關問題