API调用代码在本地主机上工作但不在服务器上

Posted

技术标签:

【中文标题】API调用代码在本地主机上工作但不在服务器上【英文标题】:API calling Code working on localhost but not on server 【发布时间】: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 的设置吗? 【参考方案1】:

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

【讨论】:

以上是关于API调用代码在本地主机上工作但不在服务器上的主要内容,如果未能解决你的问题,请参考以下文章

Google 广告显示在本地主机上,但不在实时网络服务器上

cors 在本地主机上工作,但不在生产上

Vue 组件显示在本地主机上,但不在使用 Laravel 5.4 的服务器上:Passport

无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作但不在实时站点上工作[重复]

PHP cURL 在本地主机上工作但在服务器上不工作

AWS RDS SQL 数据库在本地主机上工作——从服务器抛出错误