【问题标题】:LearnUPON - I'm getting 404 response when call my Insert APILearnUPON - 调用插入 API 时收到 404 响应
【发布时间】:2019-10-08 14:07:57
【问题描述】:

我将在我的 .NET MVC 应用程序中实现 Learn Upon API,他们提供了 cURL,我必须将这些 cURL URL 转换为 C# 中的 Web 请求,以获取或发送数据到第三方 Learn Upon API 服务器事物是Listing API,Delete API工作正常,但Create & Update API总是返回远程服务器返回错误:(404) Not Found。

Learn Before 提供的 cURL 示例:

curl -X POST -H "Content-Type: application/json" --user 988d4f1313f881e5ac6bfdfc7f54244aab : 905a12r3a0c -d '{"User": {"last_name" : "Upon",
"first_name" : "Learn", "email" : "learnuponapi@samplelearningco.com", "password" : "password1", "language" : "en", "membership_type" : "Member"
}}' https://yourdomain.learnupon.com/api/v1/users

根据上面的 cURL,我在下面编写了 API 调用的 Web 请求调用,并且这种模式在列表/删除 API 中有效。

  1. POST 模型:
{
  "first_name": "Krishna",
  "last_name": "Patel",
  "email": "krishna.patel@test.com",
  "password": "1234567890",
  "language": "en",
  "membership_type": "Member",
  "username":"krishna.patel"
}
  1. 创建 API 代码:
 [System.Web.Http.HttpPost]
        public IHttpActionResult CreateUser(UserModel mdlUser)
        {
            string content = "";
            try
            {
                if (ModelState.IsValid)
                {
                    // target url given by Learn Upon, Unique for each account
                    string yourTarget = "https://{domain}/api/v1/users";

                    string josnUserModel = JsonConvert.SerializeObject(mdlUser);
                    josnUserModel = "{\"User\":" + josnUserModel + "}";

                    WebRequest yourWebRequest = WebRequest.Create(yourTarget);
                    yourWebRequest.Method = "POST";                   

                    // Establish credentials (if necessary)
                    CredentialCache yourCredentials = new CredentialCache();
                    yourCredentials.Add(new Uri(yourTarget), "Basic", new NetworkCredential(username, password));

                    // Set your credentials for your request
                    yourWebRequest.Credentials = yourCredentials;
                    // Add basic authentication headers (if necessary)
                   
                    yourWebRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(String.Format("{0}:{1}", username, password))));                    
                    yourWebRequest.Headers.Add("data", josnUserModel);
                 
                    WebResponse yourWebResponse = yourWebRequest.GetResponse();
                    string s = yourWebResponse.ToString();
                 
                    // Get your response stream
                    using (var reponseStream = yourWebResponse.GetResponseStream())
                    {
                        // Build a reader to read your stream
                        using (var responseReader = new StreamReader(reponseStream, Encoding.UTF8))
                        {
                            // Get your result here
                            content = responseReader.ReadToEnd();
                            JObject json = JObject.Parse(content);
                            return Ok(json);
                        }
                    }                   
                }
                else
                {
                    return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
                }
            }
            catch (Exception ex)
            {
                return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }


API 返回: { "Message": "远程服务器返回错误:(404) Not Found。" }

注意:以上消息来自异常捕获块,每次发生异常并返回404响应。

【问题讨论】:

  • "消息来自异常捕获块" 你确定吗?该异常应返回 HTTP 500 状态。 404 似乎表明您的路由有问题,如果找不到适合您的 POST 的路由,则会出现 404。
  • @oerkelens,是的,我已将我的代码添加到 try & catch 块中,其他 2 cURL 使用相同的代码格式工作正常,但只有 Insert & Update cURL 返回 "远程服务器返回一个error: (404) Not Found.",如果路由有任何问题,也会在列表和删除 cURL 中返回

标签: c# asp.net-mvc curl


【解决方案1】:

您是否在 POST 请求正文中发送任何数据?

在我看来,作为一个几乎没有 C# 经验的人,好像您将 mdlUser 数据作为 HTTP 请求标头(称为 data)发送,而不是在 POST 正文中发送任何内容。在这个问题中有几个发出 POST 请求的例子:How to make HTTP POST web request

这很可能是 404 问题(或者,至少是第一个问题!)。您捕获的异常是合法的异常(4xx 通常被认为是非正常状态)。如果您想捕获 404(例如,在检查用户是否存在于您的门户中时,这可能是 LearnUpon API 的合法响应),请查看以下问题:How can I catch a 404?

最后,请随时与您的 LearnUpon 支持团队联系。我们可能没有开发人员需要的所有答案,但我们通常可以为您指明正确的方向。

免责声明:我与 LearnUpon 合作。

【讨论】:

  • 是否有可能有一些代码可以真正解决这个问题?链接很有用,但可能无法访问。
猜你喜欢
  • 2022-01-20
  • 2018-01-27
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多