2012-07-26 12 views
17

を404応答を取得しています:なぜ私は私のウェブAPIコントローラで、次のアクションを持っている私は、Web APIの私のPOSTから

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

シオマネキのいずれかでそれを打つとき、私は404個の状態で、次のエラーを取得していますまたは、テストjQueryスクリプト:

{"メッセージ:"リクエストURI 'http://localhost/amsi-v8.0.0/api/account'と一致するHTTPリソースが見つかりませんでした。 "、" MessageDetail ": "要求に一致するコントローラ 'アカウント'に何もアクションが見つかりませんでした。"}

私のhttpルートは以下のとおりですows:

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

正常に動作します。私はIISからWebDAVを削除することについて話している別の質問をここで見つけました。私はそれを試みました、同じ問題です。

なぜ私は404を手に入れましたか?

答えて

33

ASP.NET Web APIのデフォルトのアクション選択動作では、アクションメソッドのパラメータも考慮されます。シンプルなタイプのオブジェクトで、オプションではない場合は、その特定のアクションメソッドを呼び出すためにそれらを指定する必要があります。あなたのケースでは、あなたは以下のようにURIに対してリクエストを送信する必要があります?

/API /アカウントのユーザー=はFoo &パスワード=バー

を使用すると、むしろ要求本体の内部にこれらの値を取得したい場合クエリ文字列(良いアイデアがある)よりも、単にユーザーオブジェクトを作成し、それに応じて要求を送信します。

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

要求:

POSTはhttp:// localhostを:8181/API /アカウントHTTP/1.1

のContent-Type:アプリケーション/ JSON

ホスト:localhostを:8181

のContent-Length:33

そして、あなたのアクションメソッドは、以下のもののようになります。{ "名": "バー": "foo" という、 "パスワード"}:

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

+0

@PilotBobそれは上の答えです。 – tugberk

+0

私は、モデルと要求を参照しますが、コントローラのポストアクションは表示しません。それはちょうど公共の無効ポスト(ユーザーユーザー)?? – PilotBob

2

我々はそれがクラスはので、この

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

のようなモデルフォルダ内のクラスを作成し、今

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

は、すべてがスムーズに

に動作します今すぐお試しくださいパラメータを変更する期待JSONを投稿していますあなたの答えには
関連する問題