3

悲しいことに、私は WebAPI で動作する最も基本的なことを取得できません

$.ajax({
    url: "https://192.168.1.100/Api/Authentication/LogIn",
    type: "POST",
    contentType: "application/json",
    data: "{ 'username': 'admin', 'password': 'MyPass' }",
    error: function (r, s, e) { alert(e); },
    success: function (d, s, r) { alert(s); }
});

「見つかりませんでした」と出ます

API コントローラーの定義

public class AuthenticationController : ApiController
{
    [HttpPost]
    public bool LogIn(string username, string password)
    {
        return true;
    }
}

HttpPost を削除して HttpGet に置き換えてから

$.ajax({
    url: "https://192.168.1.100/Api/Authentication/LogIn?username=admin&password=MyPass",
    type: "GET",
    error: function (r, s, e) { alert(e); },
    success: function (d, s, r) { alert(s); }
});

それはうまくいきます。

WebAPI の何が問題になっていますか?

4

4 に答える 4

6

この記事は、いくつかの質問への回答に役立つはずです。

http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

ここでの考え方は、特に RESTful API では、特定のメソッドが処理する単一のリソースにデータをバインドする必要があるということだと思います。そのため、データをいくつかの緩やかなパラメーターにプッシュすることは、Web API が対応するような使用法ではありません。

投稿データを処理する場合、次のようにアクション メソッドにパラメーターを正しくバインドするように指示できます。

public class LoginDto {
    public string Username { get; set; }
    public string Password { get; set; }
}

[HttpPost]
public bool LogIn(LoginDto login) {
    // authenticate, etc
    return true;
}
于 2013-08-25T00:36:29.233 に答える
2

いくつかのこと。Yahia の変更は有効です。また、POST は、データを探す場所を知るために、WebAPI で少し指示する必要があります。私の意見では、それはかなりばかげています。POST であることがわかっている場合は、メッセージ本文を確認します。いずれにせよ、POST をこれに変更すればうまくいくでしょう。属性は WebAPI に本体を調べるように指示し、モデルはバインディングを行います。 ここに画像の説明を入力

AuthModel は、ユーザー名とパスワードのプロパティを含む単純なモデルです。WebApi が入力にバインドする方法により、これにより作業が楽になります。

詳細については、こちらをお読みください: http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1

これらの変更にうまく対応できるはずです。

于 2013-08-25T00:31:46.317 に答える