#http #asp.net-core #asp.net-web-api #basic-authentication #restsharp
#http #asp.net-core #asp.net-web-api #базовая аутентификация #restsharp
Вопрос:
Я пытаюсь использовать конечную точку с помощью 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
}
Когда я попытался с postman, я получил
{
"ResponseMessage": "Successful",
"ResponseDescription": "Request Successful",
"response": {
"AvalBal": 586324.42,
"ReverAmt": 0,
"AccCurrency": "US "
}
}
Комментарии:
1. каков ваш код http-статуса возврата / ответа?
2. Я получил 200 ответов в моем пользовательском интерфейсе swagger
3. Если вы получили 200 (и вы получили «подсказку» об «ResponseMessage»: «Успешно»,)……. тогда технически это «работает». Вам необходимо проверить на стороне сервера, произошло ли что-нибудь с вашими данными POST. Если responseInquiry равен null, то это может быть «нормальным». Предоставляет ли rest-сервис документацию по ожидаемым входам / выходам (запросам / ответам).
4. Я обновил свой вопрос, чтобы увидеть ответ, который я получил от postman
5. Хорошо, теперь я вижу дилемму….
Ответ №1:
IRestResponse<BalanceInquiryResponse> res = client.Execute<BalanceInquiryResponse>(request);
Итак, есть конкретная причина…вы помещаете BalanceInquiryResponse в общий IRestResponse, приведенный выше.
С помощью вышеупомянутого вызова это должно автоматически увлажнить объект BalanceInquiryResponse, и вам не нужно будет передавать map.
Иначе говоря, вам ~ не ~ должен понадобиться этот приведенный ниже код:
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; }
}
Комментарии:
1. Вы абсолютно правы. Я внес изменения в объект ответа