【问题标题】:API calling Code working on localhost but not on serverAPI调用代码在本地主机上工作但不在服务器上
【发布时间】:2020-12-12 05:07:10
【问题描述】:

本地代码工作正常,但上传到服务器时显示 500 [内部服务器错误] 我尝试过使用单个参数,但不适用于实时环境

  • 参数在 JSON.stringify(itemlist) 中

这是我的 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.Result;
                if (result.IsSuccessStatusCode)
                {
                    var readTask = result.Content.ReadAsAsync<TOut[]>();
                    readTask.Wait();
                    var Data = readTask.Result;
                    DataList = Data.ToList();
                    return DataList;
                }
                else
                {
                    return DataList = null;
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            return null;
        }
    }

还尝试发送 FilterParameters 模型对象的所有参数,但失败。 提前致谢。

【问题讨论】:

  • 您能否详细介绍一下 500 内部服务器错误。这样更容易找到问题的根源
  • 嗨 Muhammad,从 ajax 调用控制器方法时,它说:加载资源失败:服务器响应状态为 500 [Internal server error],有时会得到 404(未找到)- 某处控制器和 PostRequest 方法之间不起作用
  • 如果服务器响应状态为 404,这意味着它无法找到您的 API,这意味着您需要重新检查从客户端构建的 url
  • 或者你的服务器知道 _baseapiurl 还是被设置为本地的
  • 我在网络配置中设置了 _baseapiurl。 URL 显示正确。我们需要一些 Live API 的设置吗?

标签: c# jquery ajax asp.net-mvc asp.net-web-api


【解决方案1】:

当模型中有不可为空的元素并且您在帖子中缺少特定元素时,您会遇到错误代码 500。因此,请确保您提及“FilterParameters”对象中的所有元素。在你的情况下,我认为没有必要对 json 数组进行字符串化。直接发送json数组。

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多