5

私は .Net 4 で RESTFul Web Api サービスを作成している Web API 初心者です。呼び出しているクラスのコントローラーを構成しましたAuthentication。私が抱えている問題は、JSON データを Web API サービスに投稿または配置すると、コントローラーのハンドラーが呼び出されますが、パラメーター オブジェクトには NULL データが含まれていることです。データを正常に取得できますが、Post と Put で空のパラメーター オブジェクトが生成されます。

クライアント アプリケーションと Fiddler からテストしましたが、同じ結果が得られました。これが私がフィドラーから送っているものです:

Action: PUT
URI: http://127.0.0.1:81/Authentication/xyz/
HTTP Version: HTTP/1.1
Request Headers:
User-Agent: Fiddler
Host: 127.0.0.1:81
Content-Type: application/json; charset=utf-8
Content-Length: 75
Request Body:
{"hashvalue":"kbVFNeBbNHmYQXXlS6d7Ag==","password":"test","username":"dan"}

認証コントローラーの Put ハンドラーにブレークポイントを設定すると、次のようになります。

    public void Put(string IDstring, Authentication value)
    {

    }

ウォッチウィンドウに次のように表示されます。

IDstring                    null    string
value   {bbsRESTResources.Authentication}   bbsRESTResources.Authentication
    hashvalue   null    string
    password    null    string
    username    null    string

私の認証クラスは次のようになります。

namespace bbsRESTResources
{
    public class Authentication
    {
        public string username;
        public string password;
        public string hashvalue;
    }
}

私のルートは次のようになります。

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

これが認証を処理する良い方法であるかどうか気にしないでください。これは、アプリケーションをエンドツーエンドでテストするための最初のパスにすぎません。私はこの問題を抱えている他の人々の例を探しましたが、何も見つかりませんでした.

4

3 に答える 3

6

モデルバインダーは、フィールドではなく、プロパティでのみ機能することがわかりました。その結果、Authenticationクラスの個々のメンバーからプロパティを作成する必要がありました。Authenticationクラスの定義を次のように変更すると、次のように機能します。

public class Authentication
{
    public string hashvalue {get; set;}
    public string password { get; set; }
    public string username { get; set; }
}
于 2012-05-08T16:19:32.277 に答える
2

同様の問題がありました (パラメーター オブジェクトが null でした)、別の原因です。モデルをシリアライズ可能としてマークしていましたが、何らかの理由でモデル バインディングが機能しませんでした。属性を削除すると、バインディングが再び機能しました。

于 2012-10-03T04:49:03.323 に答える
0

メソッドを次のように定義します

public void Put(Authentication value)
{

}
于 2012-05-08T09:01:56.100 に答える