使用 RestSharp 基本身份验证 return 的网络 api null
Consuming web api with RestSharp basic authentication return null
我正在尝试使用具有基本身份验证的 RestSharp 端点。
我按照文档中的说明进行操作 https://restsharp.dev/getting-started/getting-started.html
请求成功,但我认为请求正文格式不正确。
我怎样才能让它工作
internal BalanceInquiryResponse BalanceInquiryRest(BalanceInquiryRequest BalanceInquiryRequest, Settings Settings)
{
// BalanceInquiryResponse BalanceInquiryResponse = new BalanceInquiryResponse();
var client = new RestClient(Settings.BaseUrl + "All/Inquiry");
client.Authenticator = new HttpBasicAuthenticator(Settings.Username, Settings.Password);
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddJsonBody(new
{
Acc = BalanceInquiryRequest.Acc
});
IRestResponse response = client.Execute(request);
IRestResponse<BalanceInquiryResponse> res = client.Execute<BalanceInquiryResponse>(request);
if (response.IsSuccessful)
{
BalanceInquiryResponse = new BalanceInquiryResponse
{
responseInquiry = res.Data.responseInquiry,
ResponseDescription = res.Data.ResponseDescription,
ResponseMessage = res.Data.ResponseMessage
};
return BalanceInquiryResponse;
}
else
{
BalanceInquiryResponse = new BalanceInquiryResponse
{
ResponseDescription = responseses.ErrorMessage,
};
return BalanceInquiryResponse;
}
}
这是我的回复正文
{
"responseMessage": "Successful",
"responseDescription": "Request Successful",
"responseInquiry": null
}
当我尝试使用邮递员时,我得到了
{
"ResponseMessage": "Successful",
"ResponseDescription": "Request Successful",
"response": {
"AvalBal": 586324.42,
"ReverAmt": 0,
"AccCurrency": "US "
}
}
IRestResponse<BalanceInquiryResponse> res = client.Execute<BalanceInquiryResponse>(request);
所以有一个特定的原因...您将 BalanceInquiryResponse 放在上面的通用 IRestResponse 中。
通过上面的调用,这应该会自动激活 BalanceInquiryResponse 对象,您不需要手动映射。
Aka,你不应该~需要下面的代码:
BalanceInquiryResponse = new BalanceInquiryResponse
{
responseInquiry = res.Data.responseInquiry,
ResponseDescription = res.Data.ResponseDescription,
ResponseMessage = res.Data.ResponseMessage
};
我认为您的问题是您的 POCO 对象 (BalanceInquiryResponse) 应该完全匹配 JSON 的“结构”。
将您的 BalanceInquiryResponse 更改为完全匹配 json“属性”。
并认识到您有一个嵌套对象。
我想应该是:
public class ResponsePoco {
public double AvalBal { get; set; }
public int ReverAmt { get; set; }
public string AccCurrency { get; set; }
}
public class BalanceInquiryResponse{
public string ResponseMessage { get; set; }
public string ResponseDescription { get; set; }
public ResponsePoco response { get; set; }
}
注意“ResponsePoco response”..注意变量名是小写的..因为...json里面有一个小写的“response”。
我将(子)对象称为“ResponsePoco”以突出对象名称和变量名称之间的区别。
如果不能“完美”匹配Poco属性。您可以使用属性来“按摩”差异。如此处所示:
https://www.newtonsoft.com/json/help/html/JsonPropertyName.htm
public class Videogame
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("release_date")]
public DateTime ReleaseDate { get; set; }
}
我正在尝试使用具有基本身份验证的 RestSharp 端点。 我按照文档中的说明进行操作 https://restsharp.dev/getting-started/getting-started.html 请求成功,但我认为请求正文格式不正确。
我怎样才能让它工作
internal BalanceInquiryResponse BalanceInquiryRest(BalanceInquiryRequest BalanceInquiryRequest, Settings Settings)
{
// BalanceInquiryResponse BalanceInquiryResponse = new BalanceInquiryResponse();
var client = new RestClient(Settings.BaseUrl + "All/Inquiry");
client.Authenticator = new HttpBasicAuthenticator(Settings.Username, Settings.Password);
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddJsonBody(new
{
Acc = BalanceInquiryRequest.Acc
});
IRestResponse response = client.Execute(request);
IRestResponse<BalanceInquiryResponse> res = client.Execute<BalanceInquiryResponse>(request);
if (response.IsSuccessful)
{
BalanceInquiryResponse = new BalanceInquiryResponse
{
responseInquiry = res.Data.responseInquiry,
ResponseDescription = res.Data.ResponseDescription,
ResponseMessage = res.Data.ResponseMessage
};
return BalanceInquiryResponse;
}
else
{
BalanceInquiryResponse = new BalanceInquiryResponse
{
ResponseDescription = responseses.ErrorMessage,
};
return BalanceInquiryResponse;
}
}
这是我的回复正文
{
"responseMessage": "Successful",
"responseDescription": "Request Successful",
"responseInquiry": null
}
当我尝试使用邮递员时,我得到了
{
"ResponseMessage": "Successful",
"ResponseDescription": "Request Successful",
"response": {
"AvalBal": 586324.42,
"ReverAmt": 0,
"AccCurrency": "US "
}
}
IRestResponse<BalanceInquiryResponse> res = client.Execute<BalanceInquiryResponse>(request);
所以有一个特定的原因...您将 BalanceInquiryResponse 放在上面的通用 IRestResponse 中。
通过上面的调用,这应该会自动激活 BalanceInquiryResponse 对象,您不需要手动映射。
Aka,你不应该~需要下面的代码:
BalanceInquiryResponse = new BalanceInquiryResponse
{
responseInquiry = res.Data.responseInquiry,
ResponseDescription = res.Data.ResponseDescription,
ResponseMessage = res.Data.ResponseMessage
};
我认为您的问题是您的 POCO 对象 (BalanceInquiryResponse) 应该完全匹配 JSON 的“结构”。
将您的 BalanceInquiryResponse 更改为完全匹配 json“属性”。
并认识到您有一个嵌套对象。
我想应该是:
public class ResponsePoco {
public double AvalBal { get; set; }
public int ReverAmt { get; set; }
public string AccCurrency { get; set; }
}
public class BalanceInquiryResponse{
public string ResponseMessage { get; set; }
public string ResponseDescription { get; set; }
public ResponsePoco response { get; set; }
}
注意“ResponsePoco response”..注意变量名是小写的..因为...json里面有一个小写的“response”。 我将(子)对象称为“ResponsePoco”以突出对象名称和变量名称之间的区别。
如果不能“完美”匹配Poco属性。您可以使用属性来“按摩”差异。如此处所示:
https://www.newtonsoft.com/json/help/html/JsonPropertyName.htm
public class Videogame
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("release_date")]
public DateTime ReleaseDate { get; set; }
}