Код вызова API, работающий на localhost, но не на сервере

#c# #jquery #ajax #asp.net-mvc #asp.net-web-api

#c# #jquery #ajax #asp.net-mvc #asp.net-веб-api #asp.net-web-api

Вопрос:

Локально код работает нормально, но при загрузке на сервер показывает 500 [Внутренняя ошибка сервера] Я пробовал с одним параметром, но не работает в живой среде

  • Параметры указаны в JSON.stringify(список элементов)

вот мой ajax-код:

  var itemlist = new Array();
 var item = {
        Fnumber: Fnumber, Snumber: Snumber, Flag: Flag, Page: _pageName, bulkupdate: false, sortText: $("#hdnsorting").val(), excel: false, filtCompany: $("#hdnfilterCompanies").val(), ShowDDLvalue: ddlValue, url: "localhost"
    }
    itemlist.push(item);
 $.ajax({
    url: '/CompanyContact/GetContacts',
    data: JSON.stringify(itemlist),
    dataType: "json",
    type: "POST",
    cache: false,
    contentType: "application/json; charset=utf-8",
    success: function (data) {}
});
  

вот мой метод контроллера, который имеет модель FilterParameters для списка параметров:

   [HttpPost]
    public JsonResult GetContacts(List<FilterParameters> item)
    {
        var List = _api.PostRequest<List<FilterParameters>, Contacts>(_baseAPIurl   "contacts", item, Convert.ToString(Session["AccessToken"]));
        return Json(List.Result, JsonRequestBehavior.AllowGet);
    }
  

и вот мой вызов API:

  public async Task<List<TOut>> PostRequest<TIn, TOut>(string uri, TIn content, string token)
    {
        List<TOut> DataList = new List<TOut>();
        try
        {
            using (var client2 = new HttpClient())
            {
                // token authorization
                client2.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
                client2.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                var serialized = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json");

                var postTask = client2.PostAsJsonAsync<TIn>(uri, content);
                postTask.Wait();

                var result = postTask.Resu<
                if (result.IsSuccessStatusCode)
                {
                    var readTask = result.Content.ReadAsAsync<TOut[]>();
                    readTask.Wait();
                    var Data = readTask.Resu<
                    DataList = Data.ToList();
                    return DataList;
                }
                else
                {
                    return DataList = null;
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            return null;
        }
    }
  

Также пытался отправить все параметры объекта модели FilterParameters, но не удалось.
заранее спасибо.

Комментарии:

1. Можете ли вы рассказать более подробно о внутренней ошибке сервера 500. Таким образом, было бы легче добраться до корня проблемы

2. Привет, Мухаммад, При вызове метода контроллера из ajax сообщается: Не удалось загрузить ресурс: сервер ответил со статусом 500 [Внутренняя ошибка сервера] и иногда получает 404 (не найден) — где-то между контроллером и методом PostRequest не работает

3. если сервер отвечает со статусом 404, это означает, что он не может найти ваш API, что означает, что вам нужно перепроверить ваш URL, который создается на стороне клиента

4. Или ваш сервер знает _baseapiurl или для него установлен локальный

5. Я установил _baseapiurl в web config. URL отображается правильно. Нужны ли нам какие-то настройки для Live API?

Ответ №1:

При наличии ненулевых элементов в модели и отсутствии определенного элемента в вашем post возникает ошибка с кодом 500. Поэтому убедитесь, что вы указали все элементы в объекте «FilterParameters». Также в вашем случае, я думаю, нет необходимости упорядочивать массив json. отправьте массив json напрямую.