0

C# で定義された基本的なコントローラーがあります。その唯一の目的は、現在のユーザーが誰であっても返すことです。

    namespace ProjectName.Controllers
{
    public class UserController : ApiController
    {


        // GET api/user/
        public string Get()
        {
            return User.Identity.Name;
        }

    }
}

次に、そのコントローラーを確認するために ngResource を定義します。

cript.factory('User', function ($resource) {
return $resource('/api/User')
});

最後に、Angular Controller でそのユーザーを取得しようとします

    $scope.checkIfAuth = function () {
    $scope.user = User.get();

    console.log($scope.user);

    if ($scope.user === '"DS//:lemieszr"') {
        console.log("success");
    }
};

問題は $scope.user が次のようなリソース オブジェクトであることです。

    Resource {$get: function, $save: function, $query: function, $remove: function, $delete: function}
    0: """
    1: "D"
    2: "S"
    3: "\"
    4: "\"
    5: "l"
    6: "e"
    7: "m"
    8: "i"
    9: "e"
    10: "s"
    11: "z"
    12: "r"
    13: """
    __proto__: Resource

とにかく、自分のユーザー名を含む文字列を取得する方法はありますか? User.query() は空の配列のみを返します。

4

2 に答える 2

1

Kris Kowal の Q promise ライブラリ ( $q )の Angular の実装を調べることをお勧めします。現在、mvc 4.0 も使用していますが、ngResource よりもはるかに柔軟であることがわかりました。

ただし、特にあなたの質問に関しては、ここでの問題は、サーバーへの非同期要求を作成し、その応答を同期的に呼び出していることです。さて、データはまだそこに到達していません (空の配列 [] が表示される理由)。その空の配列は、基本的にサーバーが「HTTPリクエストのプロトコルに従ってお疲れ様です。データを取得しています。ここにあることを証明するために、データが届いたときにそこにデータを配置する空の配列です」と言っています。

言い換えれば、あなたの問題は、 $scope.user の値を設定する前に (大まかに言えば)、その値をチェックするように設定を求めていることです。

簡単な修正のための 2 つのオプション (少なくとも私の知る限り): $scope.user を SEPARATE 関数または他のサービスでサーバーからの応答に設定し、そこに到達したら応答を使用できます。または(より良い「単純な」修正)$timeoutサービスを使用します。これは、基本的にシステムに「非同期要求が完了し、データが得られるまで冷却する」ように指示します。

于 2013-06-20T16:10:57.217 に答える