20

WebAPIコントローラーで次のアクションがあります。

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

フィドラーまたはテストjQueryスクリプトのいずれかでヒットすると、404ステータスで次のエラーが発生します。

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

私のhttpルートは次のとおりです。

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

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

なぜ404を入手するのですか?

4

2 に答える 2

38

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

/ api / account?user = Foo&password = bar

クエリ文字列ではなくリクエスト本文内でこれらの値を取得したい場合(これはより良いアイデアです)、Userオブジェクトを作成し、それに応じてリクエストを送信します。

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

リクエスト:

POST http:// localhost:8181 / api / account HTTP / 1.1

コンテンツタイプ:application / json

ホスト:localhost:8181

コンテンツの長さ: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);
}
于 2012-07-27T09:07:39.303 に答える
2

jsonを投稿するときはクラスが必要なので、このようにモデルフォルダーにクラスを作成します

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

そして今パラメータを変更します

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

今すぐお試しくださいすべてがスムーズに機能します

于 2015-07-12T01:48:52.960 に答える