我需要在BreezeSharp中使用EntityQuery从我的Breeze WebAPI获取访问令牌
我有一个名为TokenResponseModel的类,用于从服务器反序列化我的json,如下所示:
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);
当我运行它时,我收到错误。它需要在服务器上没有“/ Token”方法的元数据。
如何使用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);
这很好用。 感谢
更多说明: 我想说的是,有时候我只需要从Jreeze服务器获取结果,只需要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);
我希望能够这样做,因为有时我会从服务器返回在客户端或服务器上没有匹配项的匿名对象。 breese sharp允许我这样做而不关心元数据。或者我如何抑制元数据提取。
谢谢。
答案 0 :(得分:3)
在浏览了BreezeSharp源代码之后,我找到了做我想做的事情的解决方案。 IdeaBlade的人员已经创建了这个DataService类,它可以从服务器返回RAW JSON,甚至无需关心元数据。我是这样做的:
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);
祝贺Breeze Sharp很棒。