Web API POST数据为空....有时

时间:2016-10-13 22:04:04

标签: c# json asp.net-web-api

我建立了一个发送电子邮件的WebApi。我还有一个每晚运行的控制台应用程序,生成一个基本报告,并通过API通过电子邮件发送给我。

这是完美的,直到有一天我不再收到电子邮件。 (我随机说,但我确定发生了一些事情 - 这就是我在这里的原因。)如果我发送一个简短的HtmlMessage,就像<h1>Hi!</h1>那样有效,但是它实际生成的电子邮件越长,就会将服务器命中为null。我不确定我是否做了改变或者有什么打破了这个,但我绝对没有改变电子邮件的HTML中的任何内容。

我有一个Mailer课程:

public class Mailer
{
    public string From { get; set; }
    public string To { get; set; }
    public string Subject { get; set; }
    public string HtmlMessage { get; set; }
}

这是我的WebAPI:

[HttpPost]
[Route("api/sendmail")]
public void Sendmail(Mailer mailer) //public void Sendmail([FromBody] Mailer mailer) tried with and without [FromBody] and neither work
{
  /* A bunch of code that doesn't matter */
}

以下是调用API的代码:

static void Main() {
    string message;
    /* a bunch of stuff that generates the message */
    SendEmail(message);
}

static void SendEmail(string message) {
    var data = new Mailer { From = "foo@foo.com", To = "timothy@foo.com", Subject = "Daily Report", HtmlMessage = message };
    var data2 = new Mailer { From = "foo@foo.com", To = "timothy@foo.com", Subject = "Daily Report", HtmlMessage = "<h1 style=\"color: red;\">HI</h1>" };

    // I was using new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(data); but changed to JSON.net as an attempt to fix
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);  // THIS DOES NOT WORK?! mailer in Sendmail is null.
    //var json = Newtonsoft.Json.JsonConvert.SerializeObject(data2); // THIS WORKS?!

    var url = "https://server.com/api/sendmail";
    using (var client = new WebClient())
    {
        client.Headers.Add(_headers);
        client.Headers.Add("Content-Type", "application/json");
        client.UploadString(url, json);
    }
}

任何帮助表示赞赏!提前谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,我感到愚蠢,但我能够弄清楚。我在电子邮件的底部有一个免责声明,我最初有(C)但用版权符号取代(©)。这似乎打破了它。我用&copy;替换它,现在它完美无缺。

所以,问题是这个角色,我认为WebAPI拒绝或无法反序列化到Mailer类。

无论如何,这是固定的!希望这有助于其他人走出困境!