Как использовать http postasync в asp.net ядро 3.1

#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. Затем вы можете разделить их и посмотреть, где вам нужно настроить.