2012-07-26 57 views
17

我在我的Web API控制器以下動作:爲什麼我會收到來自我的帖子在網上API 404響應

// POST api/<controller> 
    [AllowAnonymous] 
    [HttpPost] 
    public bool Post(string user, string password) 
    { 
     return true; 
    } 

與任小提琴手打它時,我收到以下錯誤與404個狀態或者測試jQuery腳本:

{「Message」:「沒有找到與請求URI相匹配的HTTP資源http://localhost/amsi-v8.0.0/api/account'。」,「MessageDetail」: 「在控制器的」帳戶「上找不到與請求匹配的操作。」}

我的http路由如同foll行:

  RouteTable.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

工作正常。我在這裏發現了另一個關於從IIS中刪除WebDAV的問題。我嘗試過,仍然是同樣的問題。

爲什麼我得到404?

回答

33

ASP.NET Web API中的默認動作選擇行爲也關心您的動作方法參數。如果它們是簡單的類型對象並且它們不是可選的,則需要提供它們以調用該特定的操作方法。在你的情況,你應該把下面針對URI的請求:如果你想獲得請求體內這些值

/API /帳戶用戶=美孚&密碼=欄

而除查詢字符串(這是一個好主意),只需要創建一個用戶對象,並相應地發送請求:

public class User { 
    public string Name {get;set;} 
    public string Password {get;set;} 
} 

請求:

POST HTTP://本地主機:8181/API /帳戶HTTP/1.1

內容類型:應用/ JSON

主機:本地主機:8181

的Content-Length:33

{ 「名稱」: 「富」, 「密碼」: 「酒吧」}

而且你的操作方法應該如下東西:

public HttpResponseMessage Post(User user) { 

    //do what u need to do here 

    //return back the proper response. 
    //e.g: If you have created something, return back 201 

    return new HttpResponseMessage(HttpStatusCode.Created); 
} 
+0

感謝您的回答。因此,不需要傳遞查詢字符串上的值並將它們作爲POST值傳遞,Post動作的簽名會是什麼樣子? – PilotBob 2012-07-27 14:12:51

+0

@PilotBob它在上面的答案。 – tugberk 2012-07-27 14:44:07

+0

我看到模型和請求,但沒有看到控制器中的發佈操作。它只是公共無效後(用戶用戶)? – PilotBob 2012-07-27 15:30:41

2

當我們發佈一個JSON期望它一類,以便創建模型文件夾類這樣

public class Credential 
{ 
    public string username { get; set; } 
    public string password { get;set; } 
} 

現在改變參數

[HttpPost] 
public bool Post(Credential credential) 
{ 
    return true; 
} 

現在就來試試一切都會順利

相關問題