REST API的一个函数不起作用,但其余的都起作用了

本文关键字:起作用 不起作用 函数 API 一个 REST | 更新日期: 2023-09-27 18:04:26

这个问题有点令人困惑。我用Visual Studio在Web API 2中编写了一个RESTful API。我写了几个函数,如(GetMailbox, GetUser, Logout),一些POST和一些GET。这些都工作得很好。我添加了另一个POST函数SendMessage。但是这不起作用,如果我尝试将数据POST到URL,它会返回"发生错误"。我添加了调试代码(日志写入、文件写入等)来确定函数在哪里出错。但是,不会向日志中写入任何内容,也不会写入任何文件,即使写入日志是函数中的第一行代码。对于解释这种奇怪的情况,任何帮助都将是非常感激的。我还包含了这个函数以供参考。

功能:

    [HttpPost]
    public IHttpActionResult SendMessage(SendMessage sendMessage)
    {
        System.Diagnostics.EventLog.WriteEntry("REST API", "Entered SendMessage");
        File.WriteAllText(@"C:'inetpub'wwwroot'rest'debug.txt", "Entered SendMEssage");
        IEnumerable<string> headerValues;
        string token = string.Empty;
        if (Request.Headers.TryGetValues("Token", out headerValues))
        {
            token = headerValues.FirstOrDefault().ToString();
        }
        if (token == string.Empty)
        {
            return BadRequest("Missing Header: Token");
        }
        try
        {
            if (sendMessage.Attachments == null)
                sendMessage.Attachments = new string[0];
            if (sendMessage.AttachmentNames == null)
                sendMessage.AttachmentNames = new string[0];
            string tos = "", ccs = "", bccs = "";
            foreach (string str in sendMessage.To)
                tos += str + ",";
            foreach (string str in sendMessage.Cc)
                ccs += str + ",";
            foreach (string str in sendMessage.Bcc)
                bccs += str + ",";
            System.Diagnostics.EventLog.WriteEntry("REST API", sessionKey + " " + tos + " " + ccs + " " + bccs + " " + sendMessage.Attachments.Length + " " + sendMessage.AttachmentNames[0] + " " + sendMessage.Body + " " + sendMessage.Subject);
            return Ok(lib.SendMessage(token,sendMessage.To,sendMessage.Cc,sendMessage.Bcc,sendMessage.Attachments,sendMessage.AttachmentNames,sendMessage.Body,sendMessage.Subject));
        }
        catch (Exception ex)
        {
            return BadRequest(ex.InnerException.Message);
        }
    }
函数调用

:

POST /rest/api/Mailbox/SendMessage HTTP/1.1
Host: 192.168.10.160:80
Content-Type: application/json
Token: 74362B94933C4FAFA8203411257F1757
Cache-Control: no-cache
Postman-Token: 7402852a-d3f6-7c56-2b44-516dd6bd099c
{
  "To": ["email@email.com"],
  "Cc": [],
  "Bcc": [],
  "Attachments": [],
  "AttachmentNames": [],
  "Body": "Test no attachment",
  "Subject": "Test no attachment"
}

REST API的一个函数不起作用,但其余的都起作用了

正如Shekhar所说,尝试重命名您的操作:

[HttpPost]
public IHttpActionResult Send(SendMessage msg)
{
}

似乎绑定/请求参数错误。

退后一步,从头开始。

  • 删除方法内容,参数并检查空白帖子是否会到达你的控制器。
  • 添加一个简单的参数(string或int)和再次伸出你的手柄;
  • 添加复杂对象并重复;
  • 最后添加方法内容;

您肯定会比您想象的更早发现问题(可能是您的SendMessage类结构或甚至请求头的问题…)

解决方案最终比我预期的要简单。然而,找到解决方案是困难的。事实证明,这个有问题的方法调用包含了对目标系统上不存在的库的另一个调用。经常检查你的推荐信,确保它们被设置为"Local Copy: true"。