簡體   English   中英

REST API的一個功能不起作用,其余功能起作用

[英]One function of a REST API doesn't work but the rest do

這個問題有點令人困惑。 我已經使用Visual Studio在Web API 2中編寫了RESTful API。 我已經編寫了一些函數,例如(GetMailbox,GetUser,Logout),一些POST和一些GET。 這些全部工作正常。 我添加了另一個名為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"
}

正如Shekhar所說,請嘗試重命名您的操作:

[HttpPost]
public IHttpActionResult Send(SendMessage msg)
{

}

似乎是綁定/請求參數錯誤。

退后一步,從嬰兒的腳步開始。

  • 刪除方法的內容,參數並檢查是否有空白帖子到達您的控制器。
  • 添加一個簡單的參數(字符串或整數),然后再次到達您的控制器;
  • 添加一個復雜的對象並重復;
  • 最后添加方法內容;

您肯定會比您想象的早發現問題(可能是SendMessage類結構甚至請求標頭出現問題...)

該解決方案最終比我預期的要容易。 但是,找到解決方案很困難。 事實證明,該方法調用包含另一個對目標系統上不存在的庫的調用。 始終檢查您的引用,並確保將它們設置為“本地副本:true”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM