如何解决使用RestSharp基本身份验证消费Web API返回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对象补水,并且您不需要手工绘制地图。
再说一次,您不应该以下代码:
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”。注意变量名称为LOWERCASE ..因为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; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。