1

BreezeSharp で EntityQuery を使用して、Breeze WebAPI からアクセス トークンを取得する必要があります

次のように、サーバーからjsonを逆シリアル化するためのTokenResponseModelというクラスがあります。

using Newtonsoft.Json;
namespace CMIS.Integration.Common
{
    class TokenResponseModel
    {
        [JsonProperty("access_token")]
        public string AccessToken { get; set; }

        [JsonProperty("token_type")]
        public string TokenType { get; set; }

        [JsonProperty("expires_in")]
        public int ExpiresIn { get; set; }

        [JsonProperty("userName")]
        public string Username { get; set; }

        [JsonProperty(".issued")]
        public string IssuedAt { get; set; }

        [JsonProperty(".expires")]
        public string ExpiresAt { get; set; }
    }
}

実行するコードは次のとおりです。

EntityQuery query=EntityQuery.From("Token",new TokenResponseModel()).
WithParameters(new Dictionary<string,object>{{"grant_type","password"},{"username","my_username"},{"password","my_password"}});

EntityManager mng = new EntityManager(baseUrl);

var tokenobject = await query.Execute(mng);

実行すると、エラーが発生します。サーバー上の「/トークン」メソッドには存在しないメタデータが必要です。

BreezeSharp で呼び出すにはどうすればよいですか。

RestSharp を使用すると、次のように実行できます。

RestRequest request = new RestRequest("/Token", Method.POST);

request.AddParameter("grant_type", "password");
request.AddParameter("username", "my_username");
request.AddParameter("password", "my_password");

RestClient client = new RestClient(baseUrl);
var response = client.Execute<AccessToken>(request);

そして、これはうまくいきます。ありがとう

詳細説明: 私が言いたいのは、JSON 形式だけで風サーバーから結果を取得する必要がある場合があるということです。クライアント上のオブジェクトにマップしたくありません。良い例は、Token メソッドを使用してユーザーを認証する私の場合です。JSONを自分で解析する方法を知っています。以下の呼び出しから簡単に結果を取得できるようにしたいだけです。

string baseUrl = "http://myserver_url/NHIFService/";
EntityQuery query = EntityQuery.From<string>("Token").WithParameters(new new Dictionary<string, object> { { "grant_type", "password" }, { "username", "my_username" }, { "password", "my_password" } });

EntityManager mng = new EntityManager(baseUrl);
var tokenobject = await query.Execute(mng);

クライアントまたはサーバーで一致しないサーバーから匿名オブジェクトを返すことがあるため、これを実行できるようにしたいと考えています。メタデータを気にせずにこれを行うことができますか。または、メタデータのフェッチを抑制するにはどうすればよいですか。

ありがとうございました。

4

1 に答える 1

3

BreezeSharp のソース コードを調べた後、私が望んでいたことを行うためのソリューションを見つけました。IdeaBlade の担当者は、メタデータを気にせずにサーバーから RAW JSON を返すことができるこの DataService クラスを作成しました。これが私がやった方法です:

string token = await AuthenticationHelper.GetAccessToken();

string baseUrl = "http://my_server_url/appname/breeze/my_controller/";

DataService ds = new DataService(baseUrl);
string resourcePath = string.Format("GetCardDetails?CardNo={0}", cardNoTextEdit.EditValue);
ds.HttpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
string result=await ds.GetAsync(resourcePath);

おめでとう、ブリーズシャープは最高だ。

于 2014-06-13T09:05:15.920 に答える