#c# #asp.net
#c# #asp.net
Вопрос:
Я пытаюсь отправить запрос к API в asp.net . Приведенный ниже код не дает такого же результата, как код, который я запускаю в ионном приложении, которое я также включил ниже
Asp.net основной код 3.1
public class AccountInqueryParm
{
public string message_id { get; set; }
public string token { get; set; }
public string acc { get; set; }
public string br { get; set; }
public string appType { get; set; }
}
public async Task<IEnumerable<dynamic>> BalanceInquery(AccountInqueryParm parm)
{
try
{
// return new[] { parm };
HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = false };
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(mbBaseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", encoding(mbUsername ':' mbPassword));
parm = new AccountInqueryParm
{
message_id = "7ac972059c7740c5855bc603facee4f2",
token = "541f21c5f730a024b72b7239df9b38055784ebf2",
acc = "1100016",
br = "00000",
appType = "1"
};
StringContent content = new StringContent(JsonConvert.SerializeObject(parm), Encoding.UTF8, "application/json");
using (var response = await client.PostAsync(client.BaseAddress "accountEnquiry", content))
{
string apiResponse = await response.Content.ReadAsStringAsync();
return new[] { apiResponse };
}
}
}
catch (Exception)
{
throw;
}
}
Это ионно-угловой код, который работает нормально
MBServiceLocal() {
const msgid = '7ac972059c7740c5855bc603facee4f2';
const accNo = '1100016';
const brID = '00000';
const appTypeID = '1'
const tKen = '541f21c5f730a024b72b7239df9b38055784ebf2';
const url = 'api url';
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic ' btoa('username' ':' 'password')
})
};
const parmObject = { messageId: msgid, token: tKen, acc: accNo, br: brID, appType: appTypeID };
this.http.post(url, parmObject, httpOptions)
.subscribe(response => {
console.log('MBIBService Result: ', response);
}, error => {
console.log('MBIBService server error: ' error);
});
}
}
Как я могу заставить код c # работать таким же образом на основе ионно-углового кода? Я перепробовал несколько обходных путей. Например, как я могу передать httpOptions в asp.net метод httpclient postasync()?
Комментарии:
1. Не связанный: не создавайте новый HttpClient при каждом вызове. Внедрите его.
2. На самом деле, я получаю код ошибки из API, показывающий недопустимый параметр из-за следующей строки кода StringContent content = new StringContent(JsonConvert.SerializeObject(parm), кодировка. UTF8, «application / json»);, но эквивалентный код в typescript (в разделе кода ionic-angular) не сообщает об ошибке.
3. Как API узнает о вашем исходном коде? Что именно говорится в сообщении об ошибке?
4. У меня есть документация API, которая показывает в ответном сообщении, что значение параметра, которое я передаю PostAsync(), недопустимо, а значение параметра взято из StringContent . Однако, когда я передаю эквивалентный объект в коде typescript в приложении ionic-angular, ответ безупречен. Мне было интересно, что я делаю не так в ASP.NET основной код, который я представил в своем посте.
5. Мы не можем видеть все это. Поэтому мы не можем это комментировать. Мы знаем только то, что вы представляете в вопросе. Возможно, вы захотите попробовать какой-нибудь инструмент, такой как wireshark, чтобы посмотреть, что попадает на провод к API. Затем вы можете разделить их и посмотреть, где вам нужно настроить.